为什么精度会丢失?

来源:2-1 Redis字符串类型

慕粉1504263447

2020-06-21 09:47:53

http://img.mukewang.com/climg/5eeebc440958953103170201.jpg

写回答

2回答

_D_D_

2020-06-26

给你举个例子:

有符号 8 位整型 (-128 到 127)。

整数的精度是准确的,因为每一位都用的恰到好处。

如果你想存储更大的数字,增加存储的位数就好了,有符号 16 位整型 (-32768 到 32767)。


但是浮点数就不同了,浮点数是无限的,你只能尽可能接近的存储一个浮点数,在整数 1 和 3之间只有2,但是 0.1 和 0.3 之间还有无数个浮点数!


精度丢失是因为在存储过程中,十进制都是转换为二进制存储的,但是浮点数的二进制并不能表达出无限个,所以必然存在精度丢失。

按照IEEE 754规定(大多数语言都是按照这个规定设计浮点数的),对于32位的浮点数,最高的1位是符号位s,接着的8位是指数E,剩下的23位为有效数字M。

同上,23位无法表示所有有效的浮点数,所以必然存在精度丢失。

0

好帮手慕笑蓉

2020-06-21

同学,你好。浮点数在表示数字时并不是很精确,是有误差的,因为把一个十进制的小数转换成浮点数如:一个二进制位表示0.5,两个则表示0.5+0.25=0.75,只能无限去接近一个数,无法精确表示一个数据;因此进度会丢失。

如果解决了你的疑惑,请采纳,祝学习愉快~ 

0

0 学习 · 2669 问题

查看课程