浮点数简介

浮点数简介

内存中的储存形式(IEEE-745)

Address 3        2        1        0 
Content SEEEEEEE EBBBBBBB BBBBBBBB BBBBBBBB

其中的字母分别代表:

  • S(Significand):1 - 正负号
  • E(Exponent):8 - 指数部分
  • B(Base):23 - 底数部分

这样, 整个浮点数表示起来就是:

N进制的小数

看到10进制的小数, 小数点是用来分隔指数正负位的:


推广到N进制, 形式是完全相同的, 这里用二进制做一个例子:




构造一个浮点数

以12.625为例子. 首先我们推算一下它的二进制形式是什么. 如我们所知, 整数部分和小数部分的位置是恒定不变的, 因为它们是否小于1这个性质, 无论在什么进制之下都不会改变. 首先算整数部分:





小数部分(不知道是否注意到, 小数部分只有是2^n的和才有可能被表示成不循环小数. 诸如0.7, 0.3都是二进制的无限循环小数):




这样, 我们得到了一个二进位的小数1100.101, 并且化成IEEE-745标准形式:

Address 3        2        1        0 
Content SEEEEEEE EBBBBBBB BBBBBBBB BBBBBBBB
Value   01000001 01001010 00000000 00000000
Hex           41       4A       00       00

现在我们得到了一个整数0x414A0000, 把它输出出来看看是多少:

$ cat test.c 
#include <stdio.h>
int main()
{
   union {
      unsigned long u;
      float f;
   } u;
   u.u = 0x414a0000;
   printf("%f\n", u.f);
   return 0;
}

$ ./test
12.625000

你可能感兴趣的:(浮点数简介)