在计算机语言中浮点数加法不准确的原因,比如5.2+3.1=8.29999

1:问题

本来已经快要忘记这个问题,但是今天在逛某问的时候,看到了这个问题,为什么5.2+3.1等于8.29999,而不是8.3呢?

在这里插入图片描述

2:原因

这个就要涉及到计算机是如何进行运算的。
在学完计算机硬件基础的课程(当时天真的以为一个软件的干嘛学校要开设硬件的课程,那种课我们全班都学的并不是很好,估计是和我一样的想法吧。)后,就可以了解到计算机进行计算是通过二进制计算的,也就是说我们写的十进制的加法、减法这些都是要转换为二进制才能运算的

2.1:十进制转为二进制

  1. 整数部分
    整数部分采取除二取余
    在这里插入图片描述

  2. 小数部分
    小数转换成二进制就比较麻烦些,需要不停的乘以2,然后将得到的结果的整数部分作为二进制的一位,然后将结果的小数部分再乘以2,依此循环,直到小数部分为0.
    在这里插入图片描述
    可以看到0.2转换成了一个二进制的无限循环小数,而计算机在计算的时候,只能表示一定长度的数值,所以在计算的时候0.2因为进制转换丢失了一定的精度。
    同理3.1中的0.1也是,因此这就是为什么5.2+3.1=8.2999的原因。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

little student

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值