Haskell: 整数除以整数得到 Double

Haskell: Divide Integer by Integer and get Double

我想写一个 Haskell 函数,它需要两个 Integers 潜水并输出一个 Double.

签名应如下所示:

divide :: Integer -> Integer -> Double

我想要的功能是:

divide x y = x / y

我得到的这个函数的错误信息是:

Couldn't match expected type ‘Double’ with actual type ‘Integer’

如何得到这个函数的正确双精度结果?

Haskell 是一种 类型的语言。这意味着 no 隐式转换重新完成。您可以先将这两个数字转换为 Double,例如 fromIntegral :: (Integral a, Num b) => a -> b, and then use (/) :: Fractional a => a -> a -> a:

divide :: Integer -> Integer -> Double
divide x y = <b>fromIntegral</b> x / <b>fromIntegral</b> y

然而,将数字转换为 Double 可能会导致精度损失。

return 一个 Ratio, and thus use fractions, for example with the (%) :: Integral i => i -> i -> Ratio i 可能更好,所以 divide 就是 divide = (%).

您可以像 一样使用 fromRationalRational 转换为任何 Fractional 类型:

import Data.Ratio((%))

divide :: Fractional a => Integer -> Integer -> a
divide x y = <b>fromRational</b> (x % y)

所以你仍然可以将它转换为 Double:

Prelude Data.Ratio> divide 5 2 :: Double
2.5