2013-06-26 115 views
0

我知道如何将浮点二进制转换为十进制,如果指数和尾数明确给出,但这些示例如何:浮点二进制到十进制?

0.11 =? 0.101 =?

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

+0

你的意思是浮点到十进制?这是IEEE754浮点?还是另一种类型? – hexafraction

+0

IEEE754和是的,我的意思是浮点数到小数点 – jovanMeshkov

回答

0

在一定分数f(其中0 ≤ f < 1)转换到数字的序列用碱基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是限制输出的大小的常数。的mantissaexponent最终值使得mantissa * B^exponent == f(原f)(的exponent >= minExponent约束下

注意,该算法并不关心如何在计算机内部表示分数这可能是二元或三元或sexagesimal。;不要紧。该算法转换f为整数,当由的B适当功率除以,等于f

还注意mantissa需要能够存储尽可能多的数字作为-minExponent的。这可能意味着你需要使用一个大整数天秤座ry,这取决于你的编程语言提供了什么。

以下是一个演示的算法的完整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 
+0

我想感谢您给出的努力,但我需要知道这一点: .. 2 1 0。 -1 -2 .. .. 1 1 0。 1 1 .. left from point:1 * 2^2 + 1 * 2^1 + 0 * 2^0 = 6 right from point:1 *(2 ^( - 1))+ 1 *(2^(-2))= 1 * 0.50 + 1 * 0.25 = 0.75 – jovanMeshkov

+0

我不理解您的评论。也许你应该编辑你的问题来详细描述程序的输入是什么,以及相应的输出应该是什么,并给出例子。 –

+0

我希望这个手工解决,而不是一个程序 – jovanMeshkov