我不知道如何将非终止二进制数(分数)转换为十进制。任何人都可以指导我如何做一个例子吗?
2 回答
如果您有一个以 2 为底的“重复小数”并且您知道它的重复部分是什么,则可以将其转换为p/q表示法中的精确有理数(其中p和q是整数)。
然后,您可以使用除法将该数字转换为普通十进制表示法,以达到您想要的任意位数的精度。(在某些情况下,您甚至可以写出精确的十进制值。)
第一步是将二进制数分为重复部分和非重复部分。
其实我们想要三样东西:
- 非重复部分,
- 重复数字块的第一次出现,以及
- 重复数字块的长度。
例如,假设数字是:
1.0001100110011... (binary)
最后一个 0011 无限重复。
我们可以将其分解如下:
- 非重复部分为 1.0(二进制)
- 重复块的第一次出现是 0.00011(二进制),并且
- 重复块 (0011) 的长度是四位二进制数字。
二进制数的重复部分是几何级数,可以使用此类级数的标准公式进行评估:
a + a*r + a*r^2 + a*r^3 + ... = a /(1 - r )。
将此公式应用于重复数字:
- a的值只是重复块第一次出现的值
- 如果重复部分有n个二进制数字,则公式中的比率r为1/2^ n和1 - r = (2^ n - 1)/(2^ n )。
对于示例 1.00011011011...(二进制),
- 从重复部分我们有a = 0.00011(二进制)= 3/32
- n = 4,所以 1 - r = (2^4 - 1)/(2^4) = 15/16。
所以
a /(1 - r ) = (3/32) / (15/16) = 3/30 = 1/10,
我们可以写成 0.1(十进制)。
不重复的部分,当然是 1(十进制),所以
1.00011011011...(二进制)= 1 + 0.1(十进制)= 1.1(十进制)。
在此示例中,十进制表示是终止且精确的。
有许多重复的二进制分数,其中没有精确的终止十进制表示,例如,
0.01010101...(二进制)= 1/3 = 0.3333...(十进制)。
在这种情况下,您必须决定在一定数量的小数位后四舍五入,或者找到并描述小数位的重复模式。