给定一个重复的二进制数,例如0。(0011)或0.0(101),如何将其转换为十进制?

到目前为止,我能够挖掘的是将终止二进制数转换为十进制的简单方法,如下所示:

res(N+2) = res(N+1) / 2 + res(N)

其中res是步骤n之后的结果,n是当前迭代(n = 0; n->(num二进制数字))。重复应用于非终止二进制数字可提供良好的近似值,例如

dec:0.4 || bin: 0.(0110):

0     / 2 + 0 = 0
0     / 2 + 0 = 0
0     / 2 + 1 = 1
1/2   / 2 + 1 = 3/2
3/2   / 2 + 0 = 3/4
3/4   / 2 + 0 = 3/8
3/8   / 2 + 1 = 19/16
19/16 / 2 + 1 = 51/32
51/32 / 2 + 0 = 51/64
51/64 / 2 + 0 = 51/128 = 0.3984

大约为0.4。

因此,我有一种计算近似值的方法,但是我正在努力寻找一种表达这一点的方法。我开始尝试将其写为系列,可以在限制中以N-> INF的限制计算,而到目前为止,我没有太多成功。

有帮助吗?

解决方案

获得确切答案的一种方法是使用无限的几何序列。对于无穷大的指数1,0 <= r <1,r/(1-r)的无限幂总和。

在您的示例中,0。(0011),0.0011表示分数3/16。将3个因素输出,您将获得r = 1/16。 r/(1-r)=(1/16)/(15/16)= 1/15。将其乘以3您考虑的3,然后得到答案:3/15 = 1/5 = 0.2。

其他提示

给定一个重复的二进制数,例如0。(0011)或0.0(101),如何将其转换为十进制?

可以以与十进制相同的方式来求解(即可以确定确切的有理数量)。在十进制中,如果我们有 0.(567), ,我们想确定它所代表的确切合理数量,我们只采用 567 作为我们的分子, 999 (具有的数字 n 9S,在哪里 n 重复组中的数字数是我们的分母:

0.(567) = 567/999 = 189/333 = 63/111

现在是最低的。此过程是对完整无限几何序列结果的蒸馏 @Rick Regan提到.

在二进制中,我们做同样的事情,除非 n 9作为我们的分母,我们想要 n 1s(as 1 是二进制中最高的数字)。因此

0.(0011) = 0011 / 1111 =(in decimal) 3/15 = 1/5

在重复组之前,您有数字的位置,只需围绕此计算做一些算术:例如 0.0(101) 只是 0.(101) 除以2。后者是 101 / 111, , 或者 5/7, , 所以 0.0(101)5/14.

即使是计算机也无法完全正确。通常,该值简单地舍入。如果您开始以过高的精度显示浮点值,最终将以0.3984而不是0.4等奇怪的值。

将任何基碱的任何小数转换为另一个碱基通常会导致精确度损失。您无法神奇地恢复。这是您绝不应该在算上重要内容之类的重要内容中的浮标或双打的主要原因。

只要继续前进,直到您认为自己已经足够精确,然后将其舍入。

如果您使用最大的数字(基础10中的9个,基数2中的9个),则可以将所有内容放在一步中,如果您做的是相同的次数,则等于重复的数字,而0等于数字的数量在重复数字之前。希望这个示例表明这一点:

0.196(2) = (196*9 + 2)/(9000)
0.12(034) = (12*999 + 34)/99900

b0.01(011) = (b1*b111 + b11)/b11100 = (1*7 + 3)/(7*4) = 10/28
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top