Haskell中为何toRational(1/0)与infinity相等判断结果为False?
GHC中
toRational处理浮点无穷值的异常问题 我没找到该行为的相关文档,这看起来是个Bug(已确认对应GHC官方Issue)。我是不是忽略了什么?
GHCi测试过程
> import GHC.Real > inf = 1/0 :: Double > inf Infinity > infinity 1 % 0 > fromRational infinity Infinity > toRational inf 179769313486231590... % 1 > toRational inf == infinity False
解决方法
可以借助ieee754包实现一个修正后的toRational'函数:
import GHC.Real import qualified Numeric.IEEE as IEEE toRational' :: (IEEE.IEEE a, Real a) => a -> Rational toRational' a | a == IEEE.infinity = infinity | a == -IEEE.infinity = -infinity | otherwise = toRational a
内容的提问来源于stack exchange,提问作者141592653
相关产品推荐
相关产品推荐

