Haskell中如何生成NaN?是否有类似C中math.h的nan函数?
嘿,这个问题我刚好了解!Haskell里其实有专门生成NaN的工具,不用非得依赖0/0或者acos 2这种间接方式~
在Haskell中生成NaN的几种方式
1. 使用标准库的预定义常量
GHC的标准库已经为我们提供了现成的NaN常量,不用自己“造”:
- 针对
Double类型:直接用NaN(注意大小写,它在Prelude里就能直接用,不用额外导入) - 针对
Float类型:用nan(需要从GHC.Float模块导入)
示例代码:
-- 直接用Prelude里的Double类型NaN doubleNaN :: Double doubleNaN = NaN -- 导入GHC.Float使用Float类型的nan import GHC.Float (nan) floatNaN :: Float floatNaN = nan
2. 间接生成方式(可选)
如果不想导入额外模块,你提到的0/0、acos 2、sqrt (-1)这类方式确实也能生成NaN,但相比预定义常量,可读性会差一些,除非是在特定场景下需要动态生成,否则更推荐用上面的常量。
补充:关于isnan的小说明
你提到的isnan函数(不管是ClassyPrelude还是base库提供的)都是用来检测一个浮点数是否为NaN的,和生成NaN是两个不同的操作,所以找不到生成函数是正常的——因为我们直接用常量就够啦~
内容的提问来源于stack exchange,提问作者user4385532
相关产品推荐
相关产品推荐

