我不知道如何将非终止二进制数(分数)转换为十进制数。任何人都可以指导我如何处理一个例子吗?
答案 0 :(得分:3)
如果二进制数是未终止的整数,则它将是无限的(正数或负数)。你怎么能用十进制表示无限数?我认为它是∞。
否则,如果二进制数是一个浮点数,恭喜。在许多标准的浮点数(例如,IEEE 754)中,尾数由二进制模式表示,其中最高位的值为1/2,第二位的值为1/4等。您可以通过从左侧逐个累加每个位将其转换为十进制。
例如,你有一个未终止的二进制模式说
10111011101110111011 .......
转换为十进制只是将它们累积为
1 * 1/2 + 0 * 1/4 + 1 * 1/8 + 1 * 1/16 + 1 * 1/32 + 0 * 1/64 + 1 * 1/128 + 1 * 1/256 ........
直到你获得足够的精确度。
答案 1 :(得分:1)
如果您有"重复小数"在基地2,你知道什么 重复一部分是,可以将其转换为精确的 p / q 表示法中的有理数(其中 p 和 q 是整数)。 然后,您可以使用除法将该数字转换为普通的十进制表示法 到你想要的精度数字。 (在某些情况下,您甚至可以写出确切的十进制值。)
第一步是将二进制数分成它 重复和非重复部分。 其实我们想要三件事:非重复部分, 第一次出现重复数字块, 以及重复数字块的长度。 例如,假设该数字是1.0001100110011 ...(二进制), 最后一个0011无限期重复的地方。 我们可以将其分解如下: 非重复部分是1.0(二进制), 第一次出现的重复块是0.00011(二进制), 并且重复块的长度是四位二进制数字。
二进制数的重复部分是几何系列 并且可以使用这一系列的标准公式进行评估:
a + a * r + a * r ^ 2 + a * r ^ 3 + ... = a /(1 - r )。
要将此公式应用于重复数字, a 的值为 只是第一次出现重复块的值。 如果重复部分具有 n 二进制数字,则公式中的比率 r 是1/2 ^ n ,1 /(1 - r )=(2 ^ n )/(2 ^ n - 1)。
对于示例1.00011011011 ...(二进制), 从重复部分我们 a = 0.00011(二进制)= 3/32 和 n = 4,所以1 /(1 - r )=(2 ^ 4)/(2 ^ 4 - 1)= 16/15。 因此
a /(1 - r )=(3/32)*(16/15)= 3/30 = 1/10,
我们可以写为0.1(十进制)。 当然,非重复部分是1(十进制),所以
1.00011011011 ...(二进制)= 1 + 0.1(十进制)= 1.1(十进制)。
在此示例中,十进制表示是终止且精确的。 有许多重复的二进制分数,其中没有这样的十进制表示,例如,
0.01010101 ...(二进制)= 1/3 = 0.3333 ...(十进制)。
在这种情况下,您必须决定在经过一定数量的十进制数后进行舍入,或者找到并描述十进制数字的重复模式。