6

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

4

2 回答 2

8

浮点下溢的一个例子是:

double d = DBL_MIN / 3.0;

符合 IEEE 754 的实现应设置d为“<a href="http://en.wikipedia.org/wiki/Denormal_number" rel="noreferrer">subnormal”,即一个非常接近于零的数字精度降低。您会在Wikipedia上找到大量信息。

一些实现可能会“清零”。上面示例中的结果是设置d为零。

下溢是无法使用较大的负指数来表示数字的结果。有时可以通过“标准化”计算来避免它们,这相当于以某种方式计算 x 1 *2 N, x 2 *2 N,……而不是 x 1,x 2,……为您选择的 N 。

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

于 2013-07-12T09:13:11.403 回答
-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 就像一个圆圈,一旦你到达圆圈的一半,它将进入该圆圈的 -ve 一半,它将继续并且永远不会结束。它开始于0-32767 (+ve) -32768 to -1 (-ve) half.

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

希望这可以帮助。

于 2013-07-12T08:34:56.070 回答