最近 (C23) 添加的
stdckdint.h
提供了一种可移植的方法来检查整数算术中的溢出问题。我过去曾在用户提供相关整数的情况下使用过类似的编译器扩展,并且它们非常有帮助。现在我面临的情况是提供的值是浮点数,我需要对它们进行算术运算。
我的问题是是否有类似的解决方案(不一定在标准库中),以确保浮点变量(浮点数、双精度数、长双精度数)之间的操作不会遇到任何问题。如果不是,算术运算期间可能出现哪些问题(上溢、下溢等)以及如何检查这些问题?
忽略 C 语言与 IEEE 754 浮点标准的一致性(标准和实现)的讨论,IEEE 754 在第 7 条中指定了五种例外情况:
在此上下文中,“发出信号”意味着以某种方式指示异常,例如在状态寄存器中设置一个位。它并不意味着程序执行被中断或改变,就像 Unix 信号导致信号处理程序被执行一样。以上是总结,省略一些细节。