【问题标题】:Are there any binary values that don't have exact representation in decimal?是否有任何二进制值没有精确的十进制表示?
【发布时间】: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

但它是否会反过来?

是否有任何二进制值在十进制中没有精确表示?

我为什么要问?扩展理解的范围,增加人类知识的总和。

编辑:当链接的问题与我的完全相反时,我不知道为什么有人投票关闭作为重复。

【问题讨论】:

标签: floating-point computer-science precision


【解决方案1】:

不,每个二进制浮点数都有十进制的精确表示。

在二进制浮点中具有精确表示的数字正是那些可以用分母写成的有理数,它是 2 的幂,即 x = a/2n 表示整数 an

用十进制浮点数精确表示的数字正是那些可以用10的幂的分母写成的有理数,即y = b/10n.

但是第一类中的每个数字也属于第二类,因为 a/2n = a em>•5n/10n.

更一般地,每个在底数 u 中具有精确表示的数字也将在底数 v 中具有精确表示,当且仅当 的每个素因数u 也是 v 的质因数。这将确保 1/un 可以写成 a/vm 表示一些 am

这解释了不对称性:2 是质数,而 10 的质因数是 2 和 5。所以 2 的每个质因数都是 10 的质因数,但反之则不然。

【讨论】:

  • 感谢@Eric 对格式的改进。我被支持 MathJax 的网站宠坏了。
  • 浮点形式更常写成 a•b^n 而不是 a/b^n,当然它们是等价的,因为 n 是整数 iff −n 是整数。
  • @EricPostpischil:谢谢,我的意思是说“每个数字”。固定。
猜你喜欢
  • 2016-10-21
  • 2010-11-08
  • 2018-01-19
  • 1970-01-01
  • 1970-01-01
  • 2014-01-06
  • 2011-04-17
相关资源
最近更新 更多