2017-03-16 159 views

回答

-1

快速google search會給你你想要的東西......

編輯:我有阿迪鏈接d來自MathWorks FileExchange。通常很難將分數轉換爲二進制,因爲在分數轉換爲二進制形式時,帶分數的小數趨於具有無窮小數位。所以你可以有近似的結果。

編輯2:您可以使用類似wolframalpha的網站來檢查結果。 9.2553 into binary看起來像1001.01000001010110110 ...這就是我的意思。我不確定Rotem的方法是否會爲每個小數提供非常接近的值,但它看起來很好,或者只是通過循環使用除法來使用數學定義。

+0

我做的,但沒有確切的結果我got..please先生/ MAM提意見,如果你得到了它 –

+2

請不要加,其中* *僅包含一個答案鏈接。你至少應該總結一下,例如「在MATLAB FileExchange上有一個名爲XYZ的軟件包,這裏是鏈接。」如果你能在這種情況下展示一個例子如何使用這個包,那將會更好。 – hbaderts

1

特設溶液:

2^44展開(以獲得的整數值)。
將整數結果轉換爲二進制。
通過放置「十進制」點減少2^44
2^44是給出整數結果的2次展開的最小次方)。

代碼示例:

expandedRes = dec2bin(9.2553*2^44); 
res = expandedRes[1:end-44, '.', end-43:end); 

結果:

res = 

1001.01000001010110110101011100111110101010110011 
2

MATLAB,當然,使用IEEE-754 binary64格式已經存儲在二進制雙值。我們所要做的只是讓MATLAB向我們展示這些位。

一種方法是使用typecast,它使MATLAB將一組內存位置解釋爲不同的類型。在這種情況下,我們將讓MATLAB認爲doubleuint64,然後通過dec2bin發送「整數」。之後我們必須對字符串進行一些分解以獲得實際值。

注:目前只適用於正值。如果你也需要負值,我將不得不做一些調整。

function binstr = double2bin(d) 
    d = double(d); % make sure the input is a double-precision float 
    ieee754_d = dec2bin(typecast(d, 'uint64'),64); % read double as uint64 
    % IEEE-754 64-bit double: 
    % bit 1 (msb) = sign bit (we'll ignore this for now) 
    % bits 2-12 = exponent with bias of 1023 
    % bits 13-64 = significand with leading 1 removed (implicit) 
    exponent = bin2dec(ieee754_d(2:12))-1022; % 2^n has n+1 bits 
    significand = ['1' ieee754_d(13:64)]; 
    if (exponent < 1) % d < 1, so we'll need to pad with zeros 
     binstr = ['0.' repmat('0',1,-exponent) significand]; 
    else % d >= 1; move exponent bits to the left of binary point 
     binstr = [significand(1:exponent) '.' significand(exponent+1:end)]; 
    end 
end 

試運行:

>> double2bin(9.2532) 
ans = 1001.0100000011010001101101110001011101011000111000100