代码之家  ›  专栏  ›  技术社区  ›  Pascal Cuoq

浮点运算中的刷新到零行为

  •  13
  • Pascal Cuoq  · 技术社区  · 14 年前

    然而,据我记忆所及,IEEE 754没有提到要处理的刷新到零模式 denormalized numbers http://docs.sun.com/source/806-3568/ncg_lib.html ).

    在本技术文档的特定情况下,默认情况下会对非规范化数字进行标准处理,并且必须显式激活flush to zero。在默认模式下,非规范化的数字也在软件中处理,速度较慢。

    我为嵌入式C开发了一个静态分析器,它试图预测运行时可能出现的值的正确(如果有时不精确)范围。它的目标是正确的,因为它旨在用于排除运行时出错的可能性(例如,对于关键的嵌入式代码)。这需要在分析过程中捕获所有可能的行为,从而捕获浮点计算过程中生成的所有可能值。

    在这方面,我的问题有两个:

    1. ? 他们也许没有权利宣传自己是“IEEE 754”,但可以提供足够接近IEEE 754风格的浮点运算。

    2. 对于同时提供这两种功能的体系结构,在嵌入式环境中不是这样的 冲洗至零可能由系统激活

    在我用于浮点值的区间算术中处理flush到零是非常简单的,如果我知道我必须这样做,我的问题更多的是我是否必须这样做。

    2 回复  |  直到 14 年前
        1
  •  9
  •   Stephen Canon    14 年前

    两个问题都是肯定的。有些平台只支持刷新到零,还有许多平台默认刷新到零。

    您还应该知道,许多嵌入式和dsp平台使用“非规范化为零”模式,这是浮点语义中的另一个折痕。


    编辑

    在FTZ中,当一个操作在通常的算术下会产生一个非规范结果时,返回一个零。请注意,一些实现总是刷新到正零,而其他实现可能刷新到正零或负零。最好不要依赖这两种行为。

    在DAZ中,当一个操作的输入是非规范的时,零被替换。同样,也不能保证哪一个零会被替换。

    一些支持这些模式的实现允许单独设置它们(有些只支持这两种模式中的一种),因此您可能需要能够单独或同时对其中一种模式进行建模。

        2
  •  2
  •   Hans Passant    14 年前

    手臂皮质核心有一个“齐平到零”选项,很难看出你怎么能忽略它。再说一次,不要听取论坛上的商业建议。与你的客户交谈。