指数可以存储为浮点数吗?
问题描述:
我想知道二进制指数是否可以浮点形式存储。这里是什么,我的意思是一个例子:指数可以存储为浮点数吗?
在一个系统中,浮点数使用一个10-bit two's complement mantissa
和6-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
的整数幂乘一个浮点数