指数可以存储为浮点数吗?

指数可以存储为浮点数吗?

问题描述:

我想知道二进制指数是否可以浮点形式存储。这里是什么,我的意思是一个例子:指数可以存储为浮点数吗?

在一个系统中,浮点数使用一个10-bit two's complement mantissa6-bit floating point exponent

转换0101001000 000100到denary:

好吧,如果我认为指数处于正常二进制,该指数等于4

所以尾数小数点最初放在这里:

0.101001000 

然后我们移动小数点4位到右侧,产生

01010.01 

相当于10.25在denary。

如果指数可以像小数一样存储,这个答案将会大不相同。我在问是否可以用这种方式存储指数。

如果二进制指数可以存储在浮点形式

是。
若要形成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 
的整数幂乘一个浮点数