【发布时间】:2021-10-26 19:41:54
【问题描述】:
我们都知道十进制中的某些值在二进制中没有精确的表示。
例如十进制值0.1。
在 IEEE 浮点格式中,它可以有不同的表示形式,具体取决于您要专门用于表示浮点值的位数。
单精度(32 位)
- 十六进制:0x3DCCCCCD
- 二进制:1.10011001100110011001101×10-4
- 十进制:0.10000 00014 90116 11938 47656 25
双精度(64 位)
- 十六进制:0x3FB999999999999A
- 二进制:1.1001100110011001100110011001100110011001100110011010×10-4
- 十进制:0.10000 00000 00000 00555 11151 23125 78270 21181 58340 45410 15625
扩展精度(80 位)
- 十六进制:0x3FFBCCCCCCCCCCCCCCCD
- 二进制:1.100110011001100110011001100110011001100110011001100110011001101×10-4
- 十进制:0.10000 00000 00000 00000 13552 52715 60688 05425 09316 00108 74271 39282 22656 25
换句话说,十进制值0.1在二进制中没有精确的表示,它是无限重复的值:
0.0 0011 0011 0011 0011 0011 0011 0011 0011 ...
0.0 ̅0̅0̅1̅1
同样,1⁄3 没有精确的十进制表示 - “小数点”之后的数字一直重复:
0.33333 33333 33333 33333 33333 33333 33333 ...
0.̅3
但它是否会反过来?
是否有任何二进制值在十进制中没有精确表示?
我为什么要问?扩展理解的范围,增加人类知识的总和。
编辑:当链接的问题与我的完全相反时,我不知道为什么有人投票关闭作为重复。
【问题讨论】:
-
这能回答你的问题吗? Why can't decimal numbers be represented exactly in binary? 一些答案间接解决了这个问题。
标签: floating-point computer-science precision