Haskell: 整数除以整数得到 Double
Haskell: Divide Integer by Integer and get Double
我想写一个 Haskell 函数,它需要两个 Integer
s 潜水并输出一个 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 = (%)
.
您可以像 一样使用 fromRational
将 Rational
转换为任何 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
我想写一个 Haskell 函数,它需要两个 Integer
s 潜水并输出一个 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 = (%)
.
您可以像 fromRational
将 Rational
转换为任何 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