n,s,e,m
分别为
N,S,E,M
对应的实际数值
,
而
N,S,E,M
仅仅是一串二进制位。
★
S(sign)
表示
N
的符号位。对应值
s
满足:
n>0
时,
s=0; n<0
时,
s=1
。
★
E(exponent)
表示
N
的指数位,
位于
S
和
M
之间的若干位。
对应值
e
值也可正可负。
★
M(mantissa)
表示
N
的尾数位,
恰好,
它位于
N
末尾。
M
也叫有效数字位
(
sinificand
)
、
系数位(
coefficient
)
,
甚至被称作
“
小数
”
。
IEEE
标准
754
规定了三种浮点数格式:单精度、双精度、扩展精度。前两者正好对应
C
语
言里头的
float
、
double
或者
FORTRAN
里头的
real
、
double
精度类型。限于篇幅,本文仅
介绍单精度、双精度浮点格式。
★
单精度
:N
共
32
位,其中
S
占
1
位,
E
占
8
位,
M
占
23
位。
★
双精度
:N
共
64
位,其中
S
占
1
位,
E
占
11
位,
M
占
52
位。
值得注意的是,
M
虽然是
23
位或者
52
位,
但它们只是表示小数点之后的二进制位数,
也就是说,假定
M
为
“010110011...”,
在二进制数值上其实是
“.010110011...”
。而事实上,
标准规定小数点左边还有一个隐含位,
这个隐含位通常,
哦不,
应该说绝大多数情况下是
1
,
那什么情况下是
0
呢?答案是
N
对应的
n
非常小的时候,比如小于
2^(-126)(32
位单精度
浮点数
)
。不要困惑怎么计算出来的,看到后面你就会明白。总之,隐含位算是赚来了一位
精度
,
于是
M
对应的
m
最后结果可能是
"m=1.010110011...”
或者
“m=0.010110011...”
四、计算
e
、
m
首先将提到令初学者头疼的
“
规格化
(normalized)”
、
“
非规格化
(denormalized)”
。噢,其
实并没有这么难的,跟我来!掌握它以后你会发现一切都很优雅
,
更美妙的是,规格化、非
规格化本身的概念几乎不怎么重要。请牢记这句话:规格化与否全看指数
E
!
下面分三种情况讨论
E
,并分别计算
e
和
m: