#include
for(i=0;i!=1;i+=0.1)
有这么一道非常简单的问题,在正常运算情况下的结果恐怕大家都知道的,但在程序执行的时候则会产生不同的结果而变成了一个死循环。问题在什么地方?初学者都不明所以,在这里简单的介绍一下。我们知道十进制和二进制的转化关系(小数部分):乘2取整正序排列。但我们发现在0.1此数转化的时候并不能得到一个准确的二进制数。离它最近的二进制小数是0.00011……,也就是十进制的0.099……,而计算机的存储空间是有限的,所以我们得不到准确的二进制数,程序在执行时并不是按0.1计算,而是按0.099……计算,所以永远不会出现i==1的情况,也就出现了死循环的情况。
同理看下面的程序:
printf("ddddd");
在执行中,a和b的值认为是相等的,输出界面为
所以经过一系列的浮点运算或者函数运算后,一个数的准确值应该是整数却变成了小数,如1变成了0.999999999999……
联系客服