作者:雄鹰访谈录 | 来源:互联网 | 2023-06-24 16:21
我们都知道,有些十进制值在二进制中没有精确的表示。
例如十进制值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
但它会走另一条路吗?
二进制中是否有任何值在十进制中没有精确表示?
我为什么要问?扩大理解的范围,增加人类知识的总和。
编辑:当链接的问题与我的完全相反时,我不知道为什么有人投票关闭作为重复。
回答
不,每个二进制浮点数都有一个精确的十进制表示。
在二进制浮点的精确表示的数字正是那些可与分母是2的幂,即,被写入有理数X =一个/ 2 Ñ为整数一个和Ñ。
以十进制浮点数精确表示的数字正是那些可以用 10 的幂的分母书写的有理数,即y = b /10 n。
但是第一类中的每个数字也属于第二类,因为a /2 n = a •5 n /10 n。
更一般地,每个以u为底的精确表示的数字也将在以v为底的精确表示,当且仅当u 的每个素因数也是v的素因数。这将确保1 / ù Ñ可以写成一个/ v的米一段一个和米。
这解释了不对称性:2 是质数,10 的质因数是 2 和 5。所以 2 的每个质因数都是 10 的质因数,反之则不然。