14

虽然,据我所知,IEEE 754 没有提及刷新为零模式以更快地处理非规范化数字,但某些架构提供了这种模式(例如http://docs.sun.com/source/806-3568/ncg_lib .html)。

在本技术文档的特定情况下,非规范化数字的标准处理是默认设置,并且必须明确激活清零。在默认模式下,非规范化数字也在软件中处理,速度较慢。

我致力于嵌入式 C 的静态分析器,它试图预测运行时可能发生的值的正确(如果有时不精确)范围。它旨在正确,因为它旨在用于排除在运行时出错的可能性(例如对于关键的嵌入式代码)。这需要在分析期间捕获所有可能的行为,因此需要在浮点计算期间捕获所有可能的值。

在这种情况下,我的问题是双重的:

  1. 在嵌入式架构中,是否有仅提供清零的架构?他们也许不必将自己宣传为“IEEE 754”,但可以提供足够接近的 IEEE 754 风格的浮点运算。

  2. 对于同时提供两者的架构,在嵌入式环境中,系统是否不会激活刷新为零,以使反应时间更可预测(这些嵌入式系统的常见约束)?

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

4

2 回答 2

9

两个问题都是。有些平台仅支持清零,并且有许多平台默认清零。

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


编辑FTZ 与 DAZ 的进一步解释:

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

在 DAZ 中,当操作的输入是非正规输入时,将用零代替它。同样,没有一般保证将替换哪个零。

一些支持这些模式的实现允许它们被独立设置(有些只支持这两种模式中的一种),因此您可能需要能够独立地建模任何一种模式以及一起建模。

另请注意,某些实现将这两种模式组合成“清零”。例如,ARM VFP“清零”模式既是 FTZ 又是 DAZ。

于 2010-01-18T02:54:19.650 回答
2

ARM Cortex 内核有一个清零选项,很难看出你怎么能忽略它。再说一次,不要从论坛中获取商业建议。与您的客户交谈。

于 2010-01-18T02:42:12.903 回答