Floating point 将重复的二进制数转换为十进制数

Floating point 将重复的二进制数转换为十进制数,floating-point,binary,Floating Point,Binary,我如何表示0.1011111。。。。或0.10(1)作为分数a/b? a&b是整数 我一直在尝试这种方法 x=0.10(1) x=10.(1)/4 现在y=10。(1) 2y=101.(1) 这意味着2y-y=91 y=91 x=91/4 但a=91和b=4是错误的 我该如何解决这个问题呢?您需要注意数字仍然是二进制的。因此,在十进制中,y的整数部分是2,而2y的整数部分是5,因此在差值中y=3 注意,二进制0.1(1)=1,就像十进制0.9(9)=1。因此,以另一种方式,x正是0.11二进制,

我如何表示0.1011111。。。。或0.10(1)作为分数a/b? a&b是整数

我一直在尝试这种方法

x=0.10(1) x=10.(1)/4

现在y=10。(1)

2y=101.(1)

这意味着2y-y=91 y=91

x=91/4 但a=91和b=4是错误的


我该如何解决这个问题呢?

您需要注意数字仍然是二进制的。因此,在十进制中,
y
的整数部分是
2
,而
2y
的整数部分是
5
,因此在差值中
y=3


注意,二进制
0.1(1)=1
,就像十进制
0.9(9)=1
。因此,以另一种方式,
x
正是
0.11
二进制,即
1/2+1/4=3/4
您可以按如下方式执行:

x=(0.1011111)2

用十进制表示上述二进制项,我们得到:
x=1/21+0/22+1/23+1/24+…)
x=1/2+1/22*(1/21+1/22+1/23+…)

如果忽略上面等式中以粗体标记的项,括号中的项将变为x,因此我们可以说括号中的项等于(x+1/22)

x=1/2+1/22*(x+1/22)
x=1/2+x/4+1/16

求解上述方程

3x/4=9/16

x=3/4

这里是这个问题的一个推广,用于频繁出现重复模式的情况

假设x=0.001100110011…,其中模式0011无限重复

设a为图案(0011表示x),k为其长度(即4表示x)

x=a×2^-k+a×2^-2k+…
=a×2^-k×∑i=0∞ (2^-k)^i
=a×2^-k×limn→∞(1-(2^-k)^n)/(1-2^-k)
因为x是具有2^k比率的几何级数之和

当n去∞, (2^-k)^n为零,我们有
x=a×2^-k/(1-2^-k)=a/(2^k-1)

如果x=0.11111…,a=1,k=1,x=1/(2-1)=1,我们得到了LutzL已经给出的结果(以一种更简单的方式!),它回答了最初的问题

但我们可以用任何重复模式解决更复杂的问题。
例如,如果x=0.001100110011…,我们有a=0011=3和k=4。
因此x=3/(2^-4-1)=1/5=0.2


对于重复模式前面有非重复序列的情况,可以立即进行推广

小错误:
1/8
应该是
1/16
。这样,当你求解时,你会得到
x=3/4
,这与@LutzL的答案是一致的。