我试图了解C++数值属性。因此,我对下溢现象很感兴趣。谁能给我一个下溢的例子,以及如何处理它?
最佳答案
浮点下溢的示例是:
double d = DBL_MIN / 3.0;
符合IEEE 754的实现应将
d
设置为“subnormal”,即,该数字非常接近零,从而降低了精度。您可以在Wikipedia上找到大量信息。一些实现可能“刷新为零”。上面示例中的结果是将
d
设置为零。下溢是由于无法使用较大的负指数来表示该数字的结果。有时可以通过对计算进行“规范化”来避免它们,这相当于以x1 * 2N,x2 * 2N,…而不是x1,x2,…对您选择的N进行计算。
浮点下溢不是未定义的行为。如果愿意,您可以使用“FPU异常”通过轮询或接收SIGFPE来检测它。请注意,“FPU异常(exception)”与C++异常(exception)没有任何共同之处,只是名称不同。
关于c++ - 如何处理浮点下溢?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17610464/