You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 09:20:56