【发布时间】:2012-03-04 12:37:18
【问题描述】:
我不知道如何将非终止二进制数(分数)转换为十进制。谁能指导我如何做一个例子?
【问题讨论】:
标签: binary universal-binary base-conversion binary-operators
我不知道如何将非终止二进制数(分数)转换为十进制。谁能指导我如何做一个例子?
【问题讨论】:
标签: binary universal-binary base-conversion binary-operators
如果您有一个以 2 为底的“重复小数”并且您知道 重复其中的一部分,可以将其转换为精确的 p/q 表示法中的有理数(其中 p 和 q 是整数)。
然后,您可以使用除法将该数字转换为普通十进制表示法,以达到您想要的任意位数的精度。 (在某些情况下,您甚至可以写出精确的十进制值。)
第一步是将二进制数分解为 重复和不重复的部分。
其实我们想要三样东西:
假设例如数字是:
1.0001100110011... (binary)
最后一个 0011 无限重复。
我们可以这样分解:
二进制数的重复部分是几何级数 并且可以使用the standard formula for such a series进行评估:
a + a*r + a*r^2 + a*r^3 + ... = a/(1 - r).
将此公式应用于重复数字:
对于示例 1.00011011011...(二进制),
因此
a/(1 - r) = (3/32) / (15/16) = 3/30 = 1/10,
我们可以写成 0.1(十进制)。
不重复的部分,当然是1(十进制),所以
1.00011011011...(二进制)= 1 + 0.1(十进制)= 1.1(十进制)。
在此示例中,十进制表示是终止且精确的。
有许多重复的二进制分数,其中没有精确的终止十进制表示,例如,
0.01010101...(二进制)= 1/3 = 0.3333...(十进制)。
在这种情况下,您必须决定在某些小数位数后四舍五入,或者找出并描述小数位数的重复模式。
如果二进制数是未终止的整数,它将是无限的(正或负)。你怎么能用十进制表示无限数?我认为是 ∞ 。
如果二进制数是浮点数,那么恭喜。在浮点数的许多标准(例如,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 ........
直到获得足够的精度。
【讨论】: