#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”导致运行时错误。为什么?
答案 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,只需搜索谷歌:)