IEEE浮点标准用来表示
s表示符号
M表示尾数,范围0~2-ε(ε>0)
E表示阶码,对浮点进行加权
浮点数位的表示
一个单独位表示s
k位阶码字段exp表示E(无符号)
n位小数字段frac表示M,它的值还要根据exp是否位0来决定
C语言中,float单精度浮点数k=8,n=23
s | exp | frac |
31 30 23 22 0
double双精度浮点数k=11,n=52
s | exp | frac |
63 62 52 51 32
frac |
31 0
根据阶码给定的值,被编码的值分为三种情况,用单精度来表示
规格化
s | frac |
非规格化
s | exp=0 | frac |
无穷大
s | exp=255 | frac=0 |
NaN(无效)
s | exp=255 |
这些编码的值为多少,有如下规则
规格化的情况下,E=exp-bias,bias表示偏置值等于,单精度为127,双精度为1023。
M=1.frac,小数字段的高位为离小数点近的位,假如frac部分为1010...,则M=1.1010...
在非规格情况下,E=1-bias,M=0.frac,这样绝对值小于1的小数就能被表示出来
特殊值,阶码全为1,s=0,frac=0时是正无穷。s=1,frac=0时是负无穷。frac不为0时,是无效数。