2013-06-26 116 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