这个程序的输出是什么?

时间:2017-04-19 19:02:21

标签: c++ c

#include<stdio.h>
void main()
{
    int i;
    float x=0.8;
    for(i=0; i<100; i++)
    x=x*(1-x)*5;
    printf("%f \n",x);
}

根据我的说法,回答 0.80000000 看起来很简单,但真正的答案是别的。输出值“ - inf”导致运行时错误。为什么?

2 个答案:

答案 0 :(得分:3)

这意味着减去无穷大。

  

EEE 754浮点数可以表示正或负无穷大,以及NaN(不是数字)。这三个值来自计算,其结果未定义或无法准确表示。您还可以故意为其中任何一个设置浮点变量,这有时很有用。产生无穷大或NaN的计算的一些例子:

这是您的输出代码

0.800000 
0.800000 
0.800000 
0.800001 
0.799996 
0.800011 
0.799966 
0.800103 
0.799692 
0.800923 
0.797227 
0.808280 
0.774816 
0.872380 
0.556664 
1.233946 
-1.443383 
-17.633698 
-1642.905029 
-13503899.000000 
-911776526893056.000000 
-4156682286578109086379962007552.000000 
-inf 
after this -inf -inf

因为该值超出了平面

的范围

答案 1 :(得分:2)

浮点错误:尝试从0到24进行循环并查看输出, 你得到大约0.800018,这会改变1-x部分,这将成为一个否定答案(大约40sh循环)所以在第100个时它是一个非常低的负数,它基本上是-inf。

它基本上是因为x = 0.8;不是0.8锐利,而是非常接近0.8的数字,循环数量增加直到它影响计算。

有很多解决方案 - 一种方法是每次都围绕x,只需搜索谷歌:)