c语言里字符的1加1等于多少,100个0.1相加等于多少

本文探讨了计算机在处理小数运算时可能出现的误差,以100个0.1相加不等于10为例,解释了这是由于计算机用二进制表示小数的局限性。浮点数在计算机内部的表示方式,以及如何避免小数计算误差导致的问题,如通过转换为整数计算后再转换回小数,也被详细阐述。
摘要由CSDN通过智能技术生成

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。

了解了二进制表示的小数转十进制的方法后,计算出错的原因也就容易理解了。用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值