将0.1累加100次也得不到10

将0.1累加100次也得不到10,首先,我们来看一个计算机运算错误(无法得到正确结果)的例子。代码清单3-1是将0.1累加100次,然后将结果输出到显示器上的C语言程序。

代码清单3-1 将0.1累加100次的C语言程序

#include <stdio.h>
void main(){
    float sum;
    int i;
    //将保存总和的变量清0
    sum =0;
    //0.1相加100次
    for (i =1;  i <=100; i++) {
        sum +=0.1;
    }
    //显示结果
    printf("%f\n", sum);
}

首先把0赋值给变量sum,然后在此基础上累加100次0.1。sum+=0.1;表示为现在的sum值加0.1。for(i=1;i<=100;i++){…}表示将{}内包含的处理重复100次。最后,使用printf(“%f\n”,sum); ,将累加100次0.1后的变量sum的值输出到显示器上。

大家心算一下就能知道,0.1累加100次后的结果是10。但是,代码清单3-1的程序运行后,显示器上显示的结果并不是10(图3-1)。

将0.1累加100次也得不到10
图3-1 代码清单3-1的运行结果不是10

程序没错,计算机也没有发生故障,当然,C语言也没有什么问题。可为什么会出现这样的结果呢?这时,如果考虑一下计算机处理小数的机制,就讲得通了。那么,计算机内部是如何处理小数的呢?

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!