0

如果明确给出指数和尾数,我知道如何从浮点二进制转换为十进制,但是这些例子呢:

0.11 = ? 0.101 = ?

我知道值是 75 和 625,但是转换过程是如何实现的呢?

4

1 回答 1

0

要将某个分数f(where 0 ≤ f < 1) 转换为 base 中的数字序列B,请执行以下算法:

mantissa = 0
exponent = 0

while f > 0 and exponent > minExponent:
    p = f * B
    i = floor(p)
    f = p - i

    mantissa = mantissa * B + i
    exponent -= 1

minExponent是一个限制输出大小的常数。mantissa和的最终值exponent是这样的mantissa * B^exponent == f(原始的f)(在 的约束下)exponent >= minExponent

请注意,该算法不关心计算机内部如何表示分数。它可以是二进制或三进制或六十进制;没关系。该算法转换f为一个整数,当除以 的适当幂时B,等于f

另请注意,mantissa需要能够存储与-minExponent. 这可能意味着您需要使用大整数库,具体取决于您的编程语言提供的内容。

这是一个演示算法的完整 Python 脚本:

from __future__ import division
from math import floor

def convert(f, B, minExponent):
    mantissa = 0
    exponent = 0

    while f > 0 and exponent > minExponent:
        p = f * B
        integer = floor(p)
        f = p - integer

        mantissa = mantissa * B + integer
        exponent -= 1

    print "result = %d * %d^%d" % (mantissa, B, exponent)

convert(3/4, 10, -40)
convert(5/8, 10, -40)
convert(1/3, 10, -40)

这是输出:

result = 75 * 10^-2
result = 625 * 10^-3
result = 3333333333333333031620069604124830728192 * 10^-40
于 2013-06-26T23:36:22.573 回答