有没有办法在执行过程中自动检测下溢?
具体来说,我认为应该有一个编译器选项来生成代码,在可能导致下溢和类似错误的数学运算之后立即检查它们。
我说的是 G++ 编译器。
C99/C++11 具有浮点控制函数(例如fetestexcept
)和定义的标志(包括FE_UNDERFLOW
),这应该让您可以合理地移植检测浮点下溢(即使用任何支持这些的编译器/库)。
虽然它们不那么便携,但 gcc 有一个feenableexcept
这将允许您设置捕获的浮点异常。当您启用的异常之一触发时,您的程序将收到SIGFPE
signal.
至少在大多数硬件上,没有等效的整数运算——下溢仅产生 2 的补码(或其他)结果,并(例如)设置标志(例如进位和符号位)来表示发生了什么。 C99/C++11 确实有一些针对整数溢出之类的标志,但我不认为它们得到了广泛的支持。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)