有什么方法可以在执行过程中自动检测下溢?
具体来说,我认为应该有一个编译器选项来生成代码,以在可能导致下溢和类似错误的数学运算之后立即对其进行检查。
我说的是G++编译器。
最佳答案
C99/C++ 11具有浮点控制功能(例如fetestexcept
)和已定义的标志(包括FE_UNDERFLOW
),这些标志应可让您合理地便携式地检测浮点下溢(即使用支持这些功能的任何编译器/库)。
尽管它们不那么可移植,但gcc具有feenableexcept
,可让您设置被捕获的浮点异常。当您启用的一种异常触发时,您的程序将收到SIGFPE
信号。
至少在大多数硬件上,没有整数运算的等效项-下溢仅产生2的补码(或其他)结果,并且(例如)设置标志(例如进位和符号位)以指示发生了什么。 C99/C++ 11确实为整数溢出之类的东西提供了一些标志,但是我认为它们几乎不受广泛支持。
关于c++ - 在执行期间检测下溢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5752232/