IEEE-754浮点数如何工作

Ton*_*ark 9 floating-point types ieee-754

假设我有这个:

float i = 1.5
Run Code Online (Sandbox Code Playgroud)

在二进制文件中,此float表示为:

0 01111111 10000000000000000000000

我打破了二进制代表'signed','exponent'和'fraction'块.

我不明白的是这代表1.5.

一旦减去偏差(127-127),指数为0,隐式前导部分的分数部分为1.1.

1.1如何缩小= 1.5 ???

pax*_*blo 25

首先考虑十进制(基数为10):643.72是:

  • (6*10 2)+
  • (4*10 1)+
  • (3*10 0)+
  • (7*10 -1)+
  • (2*10 -2)

或600 + 40 + 3 + 7/10 + 2/100.

这是因为n 0总是1,n -1与1/n相同(对于特定情况),n -m与1/n m相同(对于更一般的情况).

同样,二进制数1.1是:

  • (1*2 0)+
  • (1*2 -1)

2 0为1,2 -1为1.

在十进制,数字在小数点的左边有乘法器1,10,100等从小数点左边的标题,和1/10,1/100 1/1000标题右(即,10 2,10 1,10 0,小数点,10 -1,10 -2,...).

在base-2中,二进制点左边的数字有乘数1,2,4,8,16,左边是左边的数字.右边的数字有乘数1/2,1/4,1/8,依此类推.

那么,例如,二进制数:

101.00101
| |   | |
| |   | +- 1/32
| |   +---  1/8
| +-------    1
+---------    4
Run Code Online (Sandbox Code Playgroud)

相当于:

4 + 1 + 1/8 + 1/32
Run Code Online (Sandbox Code Playgroud)

要么:

    5
5  --
   32
Run Code Online (Sandbox Code Playgroud)


pav*_*kha 7

二进制1.1是1 + .5 = 1.5