所以,我正在学习IEEE 754,并且有一个问题
为什么某些数字(例如数字0.1和0.2)不是值 完全按照IEEE 754标准编码?
答案 0 :(得分:3)
IEEE-754指定二进制和十进制格式。 .1和.2当然可以用十进制表示。
在二进制格式中,每个数字位置对应于2的幂。对于位101.011,位置对应于4、2、1、1 / 2、1 / 2和1/3。因此101.011表示1•4 + 0•2 + 1•1 + 0•½+ 1•¼+ 1•⅛= 4 +1 +¼+⅛=5⅜= 5.375。我们可以通过调整指数来更改2的幂(这是浮点的“浮点”部分;数字的值乘以2的幂以移动“小数点”的有效位置)。 / p>
.1无法表示,因为不存在两个总和为.1。的幂的有限集合。假设您有两个 p 0 , p 1 的幂的和 S , p 2 ,… p n ,按降序排序。由于 p n 是这些幂中的最小幂,因此其他所有幂都是该幂的倍数。这意味着和 S 是 p n 的倍数之和,因此它是的倍数> p n 。这意味着对于某些整数 j 和 k , S = j / 2 k 。如果 S = .1,则.1 = j / 2 k ,因此2 k = 10 j ,然后2 k −1 = 5 j 。但是如果2 k −1 = 5 j ,则2 k −1 是五的倍数。这是不可能的,因为它是2的幂。因此 S 不能为.1。
答案 1 :(得分:0)
@Eric已经解释了基础知识。但是,在使用浮点数时,您还需要注意很多其他问题。
我最近看到了一篇关于该主题的博客文章,其中对二进制分数进行了解释,提供了可能的解决方案出问题的示例以及有关该主题的更多信息的外部链接。
https://www.microforum.cc/blogs/entry/1-floating-point-numbers/