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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:28:09