执行期间检测下溢

时间:2011-04-22 04:14:53

标签: c++ gcc compiler-construction g++

有没有办法在执行期间自动检测下溢?

具体来说,我认为应该有一个编译器选项来生成代码,以便在数学运算之后立即检查下溢和类似的错误。

我在谈论G ++编译器。

1 个答案:

答案 0 :(得分:2)

C99 / C ++ 11具有浮点控制函数(例如fetestexcept)和定义的标志(包括FE_UNDERFLOW),可以让您合理地移植地检测浮点下溢(即,使用任何编译器/支持这些的库。)

虽然它们不是那么可移植,但是gcc有一个feenableexcept可以让你设置被困的浮点异常。当您启用的其中一个例外触发时,您的程序将收到SIGFPE信号。

至少在大多数硬件上,没有等效的整数运算 - 下溢只会产生2的补码(或其他)结果,并且(例如)设置标志(例如,进位和符号位)来表示发生了什么。 C99 / C ++ 11确实有一些标志用于整数溢出,但我不相信它们几乎得到广泛支持。