gpt4 book ai didi

c - 如何检查是否使用了 IEEE 754 单精度(32 位)浮点表示法?

转载 作者:太空狗 更新时间:2023-10-29 14:53:18 30 4
gpt4 key购买 nike

我想在我的目标板上测试以下内容:

  • 'float' 是使用 IEEE 754 单精度(32 位)浮点变量实现的吗?
  • 'double' 是否使用 IEEE 754 double (64 位)浮点变量实现?

我可以用简单的 C 程序测试它的方法有哪些。

最佳答案

不存在简单的测试。

当今绝大多数系统都使用 IEEE-754 格式进行浮点运算。但是,大多数 C 实现并不完全符合 IEEE 754(与 IEC 60559 相同)并且不设置预处理器标识符 __STDC_IEC_559__。在没有此标识符的情况下,确定 C 实现是否符合 IEEE 754 的唯一方法是以下一种方法或其组合:

  • 阅读其文档。
  • 检查其源代码。
  • 对其进行测试(当然,只有详尽的测试才能得出结论,这很困难)。

在许多 C 实现和软件应用程序中,可以忽略或解决与 IEEE 754 的偏差:您可以像使用 IEEE 754 一样编写代码,并且大部分代码都可以正常工作。但是,有很多事情可能会绊倒一个毫无戒心的程序员;即使遵守完整规范,也很难编写完全正确的浮点代码。

常见的偏差包括:

  • 中间算术比标称类型更精确。例如,使用 double 值的表达式可以用 long double 精度计算。
  • sqrt 并非在所有情况下都返回正确舍入的值。
  • 其他数学库例程返回的值可能与正确舍入的结果略有偏差(几个 ULP)。 (事实上​​ ,没有人实现了 IEEE 754-2008 中推荐的所有数学例程,同时保证正确舍入和保证运行时间。)
  • 次正规数(浮点格式边缘附近的微小数)可能会转换为零,而不是按照 IEEE 754 的规定进行处理。
  • 十进制数字(例如,源代码中的 3.1415926535897932384626433)和二进制浮点格式(例如,常见的 double 格式,IEEE-754 64 位)之间的转换二进制)在任一转换方向上并不总是正确舍入。
  • 仅支持舍入到最近的模式;不支持 IEEE 754 中指定的其他舍入模式。或者它们可能可用于简单的算术运算,但需要使用特定于机器的汇编语言才能访问。标准数学库(coslog 等)很少支持其他舍入模式。

关于c - 如何检查是否使用了 IEEE 754 单精度(32 位)浮点表示法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21404213/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com