IEEE 754 浮点数机器表示标准

32位字长浮点数:

共32位

1

8

23

符号位

解码

尾数

0 +    1 -

移127码

原码,隐含小数点前的首位1

不同数据类型之间转换时,隐藏着一些不容易被察觉的错误,比如int 和 unsigned

1. int 2 float时,有效数字可能舍去。

2. int转为double时,理论上是安全的

3. double转为float时,可能发生溢出,数据可能被舍入。

4. 32位架构unsigned int经验上限:2^32 -1 = 4294967295 // 42亿9千万

 

特别的:

1. 全0解码全0尾数: +0和-0,+/-取决于符号位

 

2. 全0阶码非全0尾数:非规格化数

用于处理阶码下溢,使得出现比最小规格化数更小的结果时,程序能继续运行。

 

3. 全1阶码全0尾数: +无穷或负无穷,取决于符号位。

可能按NaN,非数处理

也可能产生明确的结果。

 

4. 全1阶码非0尾数:NaN

非数,NaN,根据尾数最高位的不同决定是否进行异常处理。

 

5. 阶码非全0非全1:规格化非0数

 

因为特殊值的存在,除去全0全1解码后,单精度阶码个数为254,最大阶数为127。

 

C语言中 float 和 double 分别对应IEEE753的单精度和双精度。

 

但 long double 要根据处理器微架构做改变。

比较新的新事物尚未有统一标准。

 

补充:Intel采用80位双精度扩展格式(Long double),相比IEEE754,它的尾数没有隐藏位,有效位共64位。

 

http://ideone.com/

可以在这个网站在线调试运行结果。

posted @ 2016-09-25 23:20  LandFlow  阅读(997)  评论(0编辑  收藏  举报