2017-10-21 160 views
0

我想知道二進制指數是否可以浮點形式存儲。這裏是什麼,我的意思是一個例子:指數可以存儲爲浮點數嗎?

在一個系統中,浮點數使用一個10-bit two's complement mantissa6-bit floating point exponent

轉換0101001000 000100到denary:

好吧,如果我認爲指數處於正常二進制,該指數等於4

所以尾數小數點最初放在這裏:

0.101001000 

然後我們移動小數點4位到右側,產生

01010.01 

相當於10.25在denary。

如果指數可以像小數一樣存儲,這個答案將會大不相同。我在問是否可以用這種方式存儲指數。

回答

0

如果二進制指數可以存儲在浮點形式

是。
若要形成denyer from string,請使用strtol()

要將denisher轉換爲浮點,請將這些位提取到其「尾數」和指數中。用ldexp()形成FP值。

double ldexp(double x, int exp); 

ldexp功能通過2.
c11dr§7.12.6.72

#include <math.h> 
#include <stdint.h> 
#include <stdio.h> 
#include <stdlib.h> 

#define denary_MANIISSA_EXPO 9 
#define denary_MANIISSA_MASK 0xFFC0u 
#define denary_EXPO_SCALE 64 

double denary_to_double(denary d) { 
    int expo = d & (denary_EXPO_SCALE - 1); 
    int mantissa = (d - expo)/denary_EXPO_SCALE; 
    return ldexp(mantissa, expo - denary_MANIISSA_EXPO); 
} 

void denary_test(const char *s) { 
    denary d = (denary) strtol(s, NULL, 2); 
    printf("0x%04X -->", d & 0xFFFF); 
    printf(" %+.9f\n", denary_to_double(d)); 
} 
int main(void) { 
    denary_test("0101001000" "000100"); 
    denary_test("0000000000" "000000"); // zero 
    denary_test("0000000001" "000000"); // denary_POS_MIN 
    denary_test("1111111111" "000000"); // denary_NEG_MIN 
    denary_test("0111111111" "111111"); // denary_POS_MAX 
    denary_test("1000000000" "111111"); // denary_NEG_MAX 
} 

輸出

0x5204 --> +10.250000000 
0x0000 --> +0.000000000 
0x0040 --> +0.001953125 
0xFFC0 --> -0.001953125 
0x7FFF --> +9205357638345293824.000000000 
0x803F --> -9223372036854775808.000000000 
的整數冪乘一個浮點數
相關問題