是否有任何二进制值没有精确的十进制表示?
Are there any binary values that don't have exact representation in decimal?
我们都知道 十进制 中的值在二进制中没有精确表示。
例如十进制值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 位)
- 十六进制: 0x3FFBCCCCCCCCCCCCCCCCD
- 二进制: 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 = a/2n 对于整数 a 和 n.
能用二进制浮点数(位数有限)精确表示的数,正是那些能用10的次方的分母写成的有理数,即 y = b/10n.
但是第一类中的每个数字也属于第二类,因为 a/2n = a•5n/10n.
更一般地说,每个在基数 u 中具有精确表示的数字也将在基数 v 中具有精确表示,当且仅当如果 u 的每个质因数也是 v 的质因数。这将确保 1/un 可以写成 a/vm 对于某些 a 和 m.
这解释了不对称性:2 是质数,10 的质因数是 2 和 5。所以 2 的每个质因数都是 10 的质因数,但反之则不然。
我们都知道 十进制 中的值在二进制中没有精确表示。
例如十进制值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 位)
- 十六进制: 0x3FFBCCCCCCCCCCCCCCCCD
- 二进制: 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 = a/2n 对于整数 a 和 n.
能用二进制浮点数(位数有限)精确表示的数,正是那些能用10的次方的分母写成的有理数,即 y = b/10n.
但是第一类中的每个数字也属于第二类,因为 a/2n = a•5n/10n.
更一般地说,每个在基数 u 中具有精确表示的数字也将在基数 v 中具有精确表示,当且仅当如果 u 的每个质因数也是 v 的质因数。这将确保 1/un 可以写成 a/vm 对于某些 a 和 m.
这解释了不对称性:2 是质数,10 的质因数是 2 和 5。所以 2 的每个质因数都是 10 的质因数,但反之则不然。