Floating point 将重复的二进制数转换为十进制数
我如何表示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是错误的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二进制,
我该如何解决这个问题呢?您需要注意数字仍然是二进制的。因此,在十进制中,
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的答案是一致的。