【发布时间】:2012-10-18 20:59:43
【问题描述】:
我正在开发一个安全关键的嵌入式程序(C 语言),我想在其中使用 IEEE 754 浮点算法(使用 NaN 和 Infs)进行工程计算。在这里,我有两种方法(afaik)来处理浮动 点例外:
- 如果发生任何异常,则进入永久故障状态。从错误检测的角度来看,这可能更健壮,但对容错/可用性不利。
-
忽略异常,并检查最终结果是有限数(计算成功)还是 NaN,inf(计算失败)。这种解决方案容错性更强,但风险更大,因为输出 可能会意外地被排除在检查之外。
- 在安全关键系统中,哪种解决方案更好?
- 还有其他选择吗?
- 如果计算的复杂性不允许第一个解决方案(我无法避免正常使用中的异常),最后的检查是否足够,还是我应该考虑其他方面?
【问题讨论】:
-
什么嵌入式微处理器?它们特定于所讨论的微控制器/微处理器。还可以查看如何在长序列中进行惰性评估,以及微控制器/微处理器浮点单元中的 NaN 和 Inf 是什么意思
-
SH2,它的 FPU 符合 IEEE754,所以我有两种选择。
-
可能不把所有异常都一视同仁。有些可能像非规范化下溢一样无害,而 NaN 或除以零可能完全出乎意料
标签: c floating-point-exceptions