100个0.1相加等于多少?
一、前言
在大家的认知过程中可能会认为计算机是不会出现计算错误的,但是实际上,依然存在程序运行后无法得到正确数值的情况。其中,最经典的就是小数运算。
二、引入
在我们的世界里面,100个0.1相加就是10,这个是没有疑问的。但是让我们来看看计算机世界的计算结果:
首先是一段计算代码:
#include
int main(void) {floatsum;inti;
sum= 0;for (i=0 ;i<100;i++) {
sum+= 0.1;
}
printf("%f\n",sum);
}
运行结果如下:
10.000002
计算机通过编译、链接、运行得到的结果是10.000002。程序没有错。现在让我们来看一下具体原因吧。
三、计算机计算结果不正确的原因
简单来说,就是无法表示正确的数值,导致计算出来的结果成了近似值。下面进一步剖析一下。
首先,我们来看一下在计算机世界里面如何用二进制数表示小数:
例如把1011.0011这个小数点的二进制数转成十进制数。(只需将各数位数值和位权相乘,然后将相乘的结果相加)
也就是:1*2^3+0*2^2+1*2^1+1*2^0+0*2^(-1)+0*2^(-2)+1*2^(-3)+1*2^(-4) = 11.1875。
了解了二进制表示的小数转十进制的方法后,计算出错的原因也就容易理解了。用