详解浮点数的精度问题

前言

相信大家在学习编程语言的变量类型的浮点数的时候,都有听说过“浮点数的精度是有限的”,即0.1+0.2不等于0.3,那么究竟是为什么呢?

其实这个问题非常简单,只要我们转换一下视角就可以了。我们之所以知道 0.1+0.2=0.3,是因为我们使用的是十进制,而计算机判断他们不相等,根本原因是因为计算机使用的是二进制

十进制小数转化成二进制

首先我们要知道我们使用的十进制,在二进制的计算机世界中是怎么样的。已经知道如何转换的同学可以直接跳过这部分。

十进制的整数部分和小数部分转化成二进制的方法是不一样的,十进制整数转二进制使用的是「除 2 取余法」,十进制小数使用的是「乘 2 取整法」。

十进制 8.625 转化为二进制就是 1000.101,即 2^3 + 2^-1 + 2^-3 = 8+0.5+0.125

其实二进制小数并不能表示所有的小数,只能表达2 除尽的数字,比如 1/2=0.1,1/4=0.01,3/4=0.11,1/8=0.001;而像0.1,0.2,0.3这种小数,就不能用二进制完整表示(就像十进制无法精确表示1/3,1/7一样),所以使用二进制的计算机碰上这种小数,只能尽其所能表示ÿ

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值