有没有办法在执行期间自动检测下溢?
具体来说,我认为应该有一个编译器选项来生成代码,以便在数学运算之后立即检查下溢和类似的错误。
我在谈论G ++编译器。
答案 0 :(得分:2)
C99 / C ++ 11具有浮点控制函数(例如fetestexcept
)和定义的标志(包括FE_UNDERFLOW
),可以让您合理地移植地检测浮点下溢(即,使用任何编译器/支持这些的库。)
虽然它们不是那么可移植,但是gcc有一个feenableexcept
可以让你设置被困的浮点异常。当您启用的其中一个例外触发时,您的程序将收到SIGFPE
信号。
至少在大多数硬件上,没有等效的整数运算 - 下溢只会产生2的补码(或其他)结果,并且(例如)设置标志(例如,进位和符号位)来表示发生了什么。 C99 / C ++ 11确实有一些标志用于整数溢出,但我不相信它们几乎得到广泛支持。