【问题标题】:Why type of NaN is float?为什么 NaN 的类型是浮点数?
【发布时间】:2012-03-01 03:17:56
【问题描述】:

在我知道的所有语言(python、java、php、javascript 等)中,NaN 的类型是浮点数(双精度)。 有什么原因吗?我没有在 IEEE 754 中找到这种情况 [注意:IEEE 754-2008 第 6 章处理 NaN]。即使 NaN 在内部存储为浮点数,它不应该是一个单独的类型(类似于 null / nil / none)吗? 是否有任何语言使用单独的 NaN 类型?

【问题讨论】:

  • IEEE 754 确实指定了 NaN 是什么(这就是它的来源)......所以你的问题似乎是基于一个有缺陷的前提。
  • @GregHewgill :这就是我问这个问题的原因,为什么宁愿浮动而不是另一种类型?这只是方便还是传统?
  • @GregHewgill :(这是先前评论的完整版本)IEEE 754 说:“NaN:不是数字,以浮点格式编码的符号实体”;对我来说,以浮点格式编码不等于具有浮点类型(作为可以用整数 0 和 1 编码的布尔类型),这就是我问这个问题的原因,为什么而不是浮点而不是另一种类型?这只是方便还是传统?

标签: math language-agnostic types


【解决方案1】:

考虑浮点除法,我将其称为/。很明显,我们希望它有签名

function / : float x float -> float

但我们也想要(按照标准)

0 / 0 = NaN

所以NaN 需要是float 类型的值。

【讨论】:

    【解决方案2】:

    NaN 在浮点数方面有一个 specific meaning。如果一种语言想要用自己的值(例如None、NA、#N/A 等)实现“无意义”的结果,那么它是受欢迎的,但是 FP 操作需要它们自己的特定指标,独立于任何使用的语言。

    【讨论】:

      猜你喜欢
      • 2023-01-31
      • 2016-03-23
      • 2018-07-11
      • 2023-03-29
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-08
      相关资源
      最近更新 更多