执行期间检测下溢

And*_*lio 5 c++ compiler-construction gcc g++

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

具体来说,我认为应该有一个编译器选项来生成代码,在可能导致它们的数学运算之后立即检查下溢和类似的falgs.

我在谈论G ++编译器.

Jer*_*fin 3

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

虽然它们不那么可移植,但 gcc 有一个feenableexcept可以让您设置捕获的浮点异常。当您启用的异常之一触发时,您的程序将收到一个SIGFPE信号。

至少在大多数硬件上,没有等效的整数运算——下溢仅产生 2 的补码(或其他)结果,并(例如)设置标志(例如,进位和符号位)以表明发生了什么。C99/C++11 确实有一些针对整数溢出之类的标志,但我不认为它们得到了广泛的支持。