【问题标题】:Which floating point operations generate quiet/signalling NaN?哪些浮点运算会产生安静/信号 NaN?
【发布时间】:2015-02-25 03:14:10
【问题描述】:

我正在逻辑模拟器中设计 FPU,我需要知道哪些操作会生成两种 NaN(安静:qNaN 和信令:sNaN)

编辑:我发现像 0*infinity 这样的算术运算总是会生成 qNaN(来源:http://www.savrola.com/resources/NaN.html)。但是我仍然不知道的是,除了将变量设置为 sNaN 的位模式之外,是否还有其他方法可以获取 sNaN。

【问题讨论】:

    标签: floating-point nan ieee-754


    【解决方案1】:

    我假设您有某种关于您打算模拟的浮点规范的教科书或规范。在那里查找定义。

    对于更一般的内容,您可以阅读:http://en.wikipedia.org/wiki/NaN

    这是 wikipedia 关于 sNaN 的说法:

    信号 NaN
    信令 NaN 或 sNaN 是特殊形式的 NaN,当被大多数操作使用时应该引发一个无效的 异常,然后,如果合适,被“静默”成一个 qNaN,它可能 然后传播。它们是在 IEEE 754 中引入的。 关于如何使用它们的几个想法

    • 如果数据在初始化之前使用,用信号 NaN 填充未初始化的内存会产生无效异常
    • 使用 sNaN 作为更复杂对象的占位符,例如:
      • 表示已下溢的数字
      • 表示已溢出的数字
      • 更高精度格式的数字
      • 复数

    【讨论】:

    • 维基文章仅供一般参考。真正的肉是我回答的第一部分。如果您没有浮点数和运算的参考,您打算如何在模拟器中创建 FPU?
    • 因此,您的实际问题似乎是在生成输出的过程中是否存在有效的 FP 操作,它们会像生成 qNaN 一样生成 sNaN。答案是否定的。这是基于维基百科文章中对 sNaN 的简单阅读。我建议你再读一遍那个部分。
    • 啊,谢谢。我认为 wiki 是不完整的,因为它说“应该引发异常”,我立即将其与除以零之类的算术运算联系起来。
    • 是的,用于 qNaN 和 sNaN 的语言有点令人困惑,因为它们使用相同的术语具有略微不同的含义。但是,是的,sNaN 需要设置特定的位模式。
    猜你喜欢
    • 2011-11-04
    • 2012-11-12
    • 2011-07-20
    • 2012-03-09
    • 1970-01-01
    • 2015-06-19
    • 2014-07-23
    • 1970-01-01
    • 2019-04-09
    相关资源
    最近更新 更多