【问题标题】:What uses do floating point NaN payloads have?浮点 NaN 有效载荷有什么用途?
【发布时间】:2016-03-02 06:30:08
【问题描述】:

我知道 IEEE 754 将 NaN 定义为具有以下按位表示:

  • 符号位可以是01
  • 指数字段包含所有1
  • 尾数的某些位用于指定它是安静 NaN 还是信号 NaN
  • 尾数不能全部为0 位,因为该位模式保留用于表示无穷大
  • 尾数的剩余位构成有效载荷

当计算的输入为 NaN 时,有效载荷(与整个 NaN 一样)传播到浮点计算的结果,尽管我不知道这种传播的细节或标准是否指定如何这个做完了。谁设置了原始有效载荷?如果我添加两个具有不同负载的 NaN,会发生什么?

但最重要的是:我以前从未见过使用过 NaN 有效载荷。这个payload字段有什么用?

【问题讨论】:

  • 我听说过使用有效负载来回答为什么首先会生成 NaN。 (0/0oo-oo、在极点评估的函数等)我还听说过未经证实的谣言,即至少有一个程序使用(51 位)sNaN 有效负载作为(48 位)指针以进行“回退”到任意精度的算术。
  • 规范还定义了何时创建 nan,表示 nans 与安静的 nans。这个想法是,您不必在每次操作后检查是否存在上溢或下溢或除以零或任何您可以查看最终结果并查看计算在某些时候出现问题的内容。
  • 是的,刚刚检查过,它列出了正确结果为 NaN 的几种情况。 (不一定是我在上面评论中列出的那些)

标签: floating-point nan ieee-754


【解决方案1】:

统计环境 R 使用NaN 有效载荷来区分一个特定的NaN,作为表示统计“缺失值”,打印为NA。这允许“缺失”通过数值计算传播——尽管当将缺失值与另一个 NaN 组合时,无法预测会传播哪个。

【讨论】:

    【解决方案2】:

    在开发 IEEE754 和 NaN 时,人们认为这是一个好主意。我实际上已经看到它用于存储创建 NaN 的原因。

    今天,出于几个原因,我不会在可移植代码中使用它。你有多确定这个有效载荷会在例如分配中存活下来?如果您指定 x = y,您有多确定 x 与 y 具有相同的 NaN 有效负载?你有多确定它会在算术中存活下来?如果 a 或 b 是 NaN,则 a op b 应该是一个 NaN,或者如果它们都是 NaN,则应该是两个 NaN 之一。确定是这样吗?我不会愿意打赌。

    【讨论】:

    • 还应注意,IEEE-754 (2008) 并未强制 NaN 有效负载,它只是推荐 它们。使用单个规范 NaN 模式(在 SNaN 和 QNaN 风格中)将符合标准。请参阅标准的第 6.2 节,特别是(强调我的):“为了促进 NaN 中包含的诊断信息的传播,尽可能多的信息应该保留在 NaN 操作结果中。”
    【解决方案3】:

    【讨论】:

    • 这太迷人了!您能否总结一下答案中链接中的信息?一旦你这样做,我就会准备好投票。
    猜你喜欢
    • 2019-07-30
    • 2016-07-22
    • 2020-01-11
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-05
    • 1970-01-01
    相关资源
    最近更新 更多