Floating point IEEE 754标准中的零点一

Floating point IEEE 754标准中的零点一,floating-point,binary,ieee-754,ieee,Floating Point,Binary,Ieee 754,Ieee,所以,我正在学习IEEE 754,我有一个问题 为什么有些数字(例如数字0.1和0.2)不是值 在IEEE 754标准中准确编码的?IEEE-754规定了二进制和十进制格式。1和.2当然可以用十进制表示 在二进制格式中,每个数字位置对应于二的幂。对于位101.011,位置对应于4、2、1、½、¼和⅛. 因此101.011代表1•4+0•2+1•1+0•½+1•¼+1•⅛ = 4 + 1 + ¼ + ⅛ = 5.⅜ = 5.375. 我们可以通过调整指数来改变二的幂(这是浮点的“浮点”部分;数字的

所以,我正在学习IEEE 754,我有一个问题

为什么有些数字(例如数字0.1和0.2)不是值
在IEEE 754标准中准确编码的?IEEE-754规定了二进制和十进制格式。1和.2当然可以用十进制表示

在二进制格式中,每个数字位置对应于二的幂。对于位101.011,位置对应于4、2、1、½、¼和⅛. 因此101.011代表1•4+0•2+1•1+0•½+1•¼+1•⅛ = 4 + 1 + ¼ + ⅛ = 5.⅜ = 5.375. 我们可以通过调整指数来改变二的幂(这是浮点的“浮点”部分;数字的值乘以二的幂以移动“小数点”的有效位置)


.1无法表示,因为不存在总和为.1的有限二次幂集。假设你有两个幂的和,按降序排序。因为pn是这些幂中最小的,所以所有其他幂都是它的倍数。这意味着总和S是pn的倍数之和,因此它是pn的倍数。这意味着对于一些整数j和k,S=j/2k。如果S=0.1,那么0.1=j/2k,那么2k=10j,然后是2k−1=5 j。但是如果2k−1=5J,然后是2k−1是5的倍数。这是不可能的,因为它是二的幂。因此S不能是。1。

IEEE-754同时指定了二进制和十进制格式。1和.2当然可以用十进制表示

在二进制格式中,每个数字位置对应于二的幂。对于位101.011,位置对应于4、2、1、½、¼和⅛. 因此101.011代表1•4+0•2+1•1+0•½+1•¼+1•⅛ = 4 + 1 + ¼ + ⅛ = 5.⅜ = 5.375. 我们可以通过调整指数来改变二的幂(这是浮点的“浮点”部分;数字的值乘以二的幂以移动“小数点”的有效位置)


.1无法表示,因为不存在总和为.1的有限二次幂集。假设你有两个幂的和,按降序排序。因为pn是这些幂中最小的,所以所有其他幂都是它的倍数。这意味着总和S是pn的倍数之和,因此它是pn的倍数。这意味着对于一些整数j和k,S=j/2k。如果S=0.1,那么0.1=j/2k,那么2k=10j,然后是2k−1=5 j。但是如果2k−1=5J,然后是2k−1是5的倍数。这是不可能的,因为它是二的幂。所以S不可能是。1.

@Eric已经解释了基本原理。但是,在使用浮点数时,还有许多其他问题需要注意

我最近看到了这篇关于这个主题的博文,它解释了二进制分数、可能的解决方案如何出错的示例以及关于这个主题的更多信息的外部链接


@Eric已经解释了基础知识。但是,在使用浮点数时,还有许多其他问题需要注意

我最近看到了这篇关于这个主题的博文,它解释了二进制分数、可能的解决方案如何出错的示例以及关于这个主题的更多信息的外部链接