Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 浮点运算中的刷新到零行为_C_Embedded_Floating Point_Ieee 754 - Fatal编程技术网

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

C 浮点运算中的刷新到零行为,c,embedded,floating-point,ieee-754,C,Embedded,Floating Point,Ieee 754,然而,据我记忆所及,IEEE 754并没有提到要更快地处理刷新到零模式,一些体系结构提供了这种模式(例如) 在本技术文档的特定情况下,默认情况下会对非规范化数字进行标准处理,并且必须显式激活flush to zero。在默认模式下,非规范化的数字也在软件中处理,速度较慢 我为嵌入式C开发了一个静态分析器,它试图预测运行时可能出现的值的正确(如果有时不精确)范围。它的目标是正确的,因为它旨在用于排除运行时出错的可能性(例如,对于关键的嵌入式代码)。这需要在分析过程中捕获所有可能的行为,从而捕获浮点

然而,据我记忆所及,IEEE 754并没有提到要更快地处理刷新到零模式,一些体系结构提供了这种模式(例如)

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

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

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

  • 在嵌入式体系结构中,是否有只提供零刷新的体系结构?他们也许没有权利宣传自己是“IEEE 754”,但可以提供足够接近IEEE 754风格的浮点运算

  • 对于同时提供这两种功能的体系结构,在嵌入式环境中,刷新到零不可能被系统激活,以使反应时间更可预测(这些嵌入式系统的一个常见约束)


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

    ARM Cortex cores有一个齐平到零选项,很难看出你怎么能忽略它。再说一次,不要听取论坛上的商业建议。与您的客户交谈。

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

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


    编辑自由贸易区与DAZ的进一步解释:

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

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

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


    还请注意,一些实现将这两种模式组合为“刷新到零”。例如,ARM VFP“齐平至零”模式既有FTZ模式,也有DAZ模式。

    好问题,说明得很好。我不是嵌入式系统方面的专家,但我怀疑没有一个明确的答案。这完全取决于您特定的最终用户环境。现有用户非常棒,他们使用健全的平台,了解浮点问题,并且他们通过编译器取消激活静默生成的
    fmadd
    ,以使舍入错误更可预测。我感兴趣的是潜在用户。感谢您的反馈。今天我实现了区间算法,它同时包含FTZ、DAZ(刷新到+0或相同符号零)和IEEE 754次正常值的所有可能性。我们的回归测试没有显示出与之前的仅IEEE 754算法相比的任何差异。因此,可能没有必要为这个选项打扰用户,新模式应该让每个人都感到高兴。这是一件非常好的事情。再次感谢!执行浮点运算的实用性是什么?这样表示小于最小标准化值的尾数位就可以四舍五入了?我认为这可能比处理非规范化值更便宜,因为所有浮点数都具有相同的表示形式。只有“最终清理”阶段需要更改。@supercat:我不是硬件设计师,但我认为该方案实际上不会在实践中节省太多的复杂性(而且会导致比刷新更大的精度损失)@StephenCanon:flush to zero的问题与其说是精度问题,不如说是当x+(y-x)与y的距离不比x近时发生的逻辑问题。将数字四舍五入以表示它们之间的差异可以避免此类问题。@supercat:绝对正确,但我不认为在硬件中实现比渐进下溢(具有相同的属性和更高的精度)要便宜得多。然而,正如我所指出的,我不是一个硬件设计师。