如何处理浮点下溢?

时间:2013-07-12 08:14:07

标签: c++ floating-point underflow

我正在尝试理解C ++数字属性。因此,我对下溢现象感兴趣。谁能给我一个下溢的例子以及如何处理它?<​​/ p>

2 个答案:

答案 0 :(得分:6)

浮点下溢的一个例子是:

double d = DBL_MIN / 3.0;

符合IEEE 754的实现应该将d设置为“subnormal”,也就是说,这个数字非常接近零,精度会降低。您可以在Wikipedia找到大量信息。

某些实现可能会“刷新到零”。上例中的结果是将d设置为零。

下溢是较大的负指数无法表示数字的结果。有时可以通过“规范化”计算来避免它们,这相当于以某种方式计算x 1 * 2 N ,x 2 * 2 N ,...代替x 1 ,x 2 ,...代表您选择的N.

浮点下溢不是未定义的行为。如果您愿意,可以使用“FPU例外”通过轮询或接收SIGFPE来检测它。请注意,除了名称之外,“FPU异常”与C ++异常没有任何共同之处。

答案 1 :(得分:-3)

int main()
{
        short int x ;

        for(x=0;;x++)
        {
                printf("%d \n",x);

                if(x < 0)
                  break;
        }
}

O / P

---
---
--
32761
32762
32763
32764
32765
32766
32767
-32768

假设您在签名号码中询问下溢概念。这里的概念是签名的no就像圆圈一样,一旦你到达圆圈的一半,它就会进入圆圈的一半,并且它会继续并且永远不会结束。它从0-32767 (+ve) -32768 to -1 (-ve) half.

开始

这是程序员处理这种情况的责任。如果下溢,编译器不会引发任何错误。

希望这有帮助。