数据编码与精度问题(float)

博客探讨了浮点数在二进制编码中的精度问题,指出整数能精确转换为二进制,而浮点数由于小数部分无法精确表示,导致精度丢失。文章通过举例说明了IEEE编码下浮点数的存储方式,并提及不同环境下的float存储字节数差异。
摘要由CSDN通过智能技术生成

上篇中提到了ieee编码并留了一个浮点型数据存储与精度丢失的问题。本以为这是一个特别高深的底层问题,但经过查阅资料后发现,这个问题其实很简单,了解两个知识点就能清楚到底是怎么回事了。

  1. 知识点1:
    首先让我们来复习一下整数转为二进制的过程
例子:十进制数9转为二进制
			商      余数
	9/2     4  ...  1  
	4/2     2  ...  0
	2/2     1  ...  0
	1/2     0  ...  1
	所以9的二进制码:1001

所有的整数按照这种方式转换,都能用一个准确的二进制表示,所以所有整数都能用二进制精确表示

然后我们再来看看浮点数转化为二进制的过程

例子:3.2转为二进制
整数部分同上3-->0011
小数部分0.2
	0.2 * 2 = 0.4   取整数部分  0
	0.4 * 2 = 0.8   取整数部分  0
	0.8 * 2 = 1.6   取整数部分  1
	0.6 * 2 = 1.2   取整数部分  1
	0.2 * 2 = 0.4   取整数部分  0
			 .
			 .
			 .
	所以3.2的二进制码:11.00110011...(这不是最后的二进制码,这是为了方便理解进行整数与小数换算后的凑合)

可以看出,小数部分是不能用二进制准确表述出来的。这就像我们常用的十进制不能准确表示1/3 — 0.333333…
二进制也不能准确表示1/10 (0.1–>0.2–>0.4–>0.8–>(1.6取小数)0.6–>(1.2取小数)0.2…)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值