Algorithm 分数到二进制的转换算法

Algorithm 分数到二进制的转换算法,algorithm,binary,Algorithm,Binary,我被教导将小数转换成二进制的方法是将数字连续乘以2,将整个部分加到位字符串中,然后再乘以新的分数。这在某些情况下似乎有效,但在其他情况下,如0.32,它会导致无限循环 0.32 * 2 = 0 + .64 0.64 * 2 = 1 + .28 0.28 * 2 = 0 + .56 0.56 * 2 = 1 + .12 0.12 * 2 = 0 + .24 0.24 * 2 = 0 + .48 0.48 * 2 = 0 + .96 0.96 * 2 = 1 + .92 0.92 * 2 = 1 +

我被教导将小数转换成二进制的方法是将数字连续乘以2,将整个部分加到位字符串中,然后再乘以新的分数。这在某些情况下似乎有效,但在其他情况下,如0.32,它会导致无限循环

0.32 * 2 = 0 + .64
0.64 * 2 = 1 + .28
0.28 * 2 = 0 + .56
0.56 * 2 = 1 + .12
0.12 * 2 = 0 + .24
0.24 * 2 = 0 + .48
0.48 * 2 = 0 + .96
0.96 * 2 = 1 + .92
0.92 * 2 = 1 + .84
0.84 * 2 = 1 + .68
0.68 * 2 = 1 + .36
0.36 * 2 = 0 + .72
0.72 * 2 = 1 + .44
0.44 * 2 = 0 + .88
0.88 * 2 = 1 + .76
0.76 * 2 = 1 + .52
0.52 * 2 = 1 + .04
0.04 * 2 = 0 + .08
0.08 * 2 = 0 + .16
0.16 * 2 = 0 + .32 // Loop

在这种情况下我该怎么办?

我不熟悉你的算法,但教授长除法的算法与你的建议类似。通常,我们通过询问某个数字的10的多少次幂进入另一个数字来教授长除法。这将给出十进制的答案。通过询问某个数字的2的多少次幂进入另一个数字,可以对二进制进行同样的处理。如果我们想把0.32转换成二进制,我们必须问2的每一次幂有多少。幂是0,-1,-2,等等

算法:

1. Start with n = 0
2. How many how many times does 2^n go into the number (should be either 0 or 1 times)? Write that down.
3. If there is a remainder, decrement n (ie, n = n - 1).
4. Go to step 2 until no remainder remains or the pattern repeats.

Put a decimal after the first digit.

我不熟悉你的算法,但是教授长除法的算法与你的建议类似。通常,我们通过询问某个数字的10的多少次幂进入另一个数字来教授长除法。这将给出十进制的答案。通过询问某个数字的2的多少次幂进入另一个数字,可以对二进制进行同样的处理。如果我们想把0.32转换成二进制,我们必须问2的每一次幂有多少。幂是0,-1,-2,等等

算法:

1. Start with n = 0
2. How many how many times does 2^n go into the number (should be either 0 or 1 times)? Write that down.
3. If there is a remainder, decrement n (ie, n = n - 1).
4. Go to step 2 until no remainder remains or the pattern repeats.

Put a decimal after the first digit.

除了K/2^M类分数(如0.125、0.75等)以外的所有分数都不能用有限的二进制数字表示,因此它们具有无限重复结构,如0.11011。。。所以大部分分数都不能精确表示


除了
2^p*5^q
之外,十进制和分母的情况也一样-例如,1/3=0.333。。。。。。以此类推

除K/2^M类分数(如0.125、0.75等)以外的所有分数都不能用有限的二进制数字表示,因此它们具有无限重复结构,如0.11011。。。所以大部分分数都不能精确表示


除了
2^p*5^q
之外,十进制和分母的情况也一样-例如,1/3=0.333。。。。。。依此类推,这是有道理的。所以要遵循IEEE 754标准,应该在23次迭代后停止,因为这是单精度浮点数的尾数限制?是的。还请注意,IEEE浮点尾数始终位于0.5..1范围内,隐式为一位,因此您需要使用指数a-1表示0.64(而不是指数a 0表示0.32)@richbai90进行适当的舍入,需要1)+1迭代(24)找到舍入位,2)查看是否存在任何余数以打破中途情况。“大多数浮点数都不能精确表示。”-->这是不完全可转换的。这是有意义的。因此,为了遵循IEEE 754标准,应该在23次迭代后停止,因为这是单精度浮点数尾数的限制?是的。还请注意,IEEE浮点尾数始终位于0.5..1范围内,隐式一位,因此需要用指数A-1表示0.64(而不是指数为0的0.32)@richbai90要正确地进行舍入,需要1)+1迭代(24)来找到舍入位,2)查看是否存在任何余数来打破中途情况。”大多数浮点数都没有精确表示。“->所有有限
双精度、浮点
都是精确的,并且使用二进制编码。在类似FP的表示法(代码常量)中,十进制数不能完全转换。