【发布时间】:2014-01-24 23:07:46
【问题描述】:
有没有办法在 Haskell 中定义信号 NaN?我找到了两种处理 NaN 的方法:
1) 使用 0/0,产生相当的 nan
2) 包Data.Number.Transfinite,它也没有信令NaN。
PS 有没有什么办法不用写C库就可以将Word64逐位放入Double?
【问题讨论】:
-
@bheklilr,ieee754 模块也没有信号 NaN。检查 NaN 非常简单:x == x 是 False。
-
如果要将
Word64逐位转换为Double,可以使用unsafeCoerce。对于字节大小不同或装箱级别不同的其他类型,您可能会得到未定义的行为。 -
您可以使用
unsafeCoerce在 GHC 中以非常不便携的方式在Word64和Double之间逐位转换,但仍然不支持 sNaN,因为它没有在 @ 中实现987654336@ 实例。NaN就像0.0/0一样。
标签: haskell floating-point ieee-754