正文
IEEE浮点标准
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
原文地址:http://www.math.byu.edu/~schow/work/IEEEFloatingPoint.htm
Floating point system
Floating point arithmetic
浮点型标准是什么?
IEEE浮点标准是上世纪80年代初由IEEE采用的一个浮点计算系统。
计算机采用IEEE浮点标准的要求:
1.正确计算舍入;
2.浮点数应该被计算机正确表示;
3.异常处理应该是明确一致的。
引用:见顶部
浮点数表示法
32位机的单精度数:
32位机的单精度模式会将一个字表示为b1b2b3...b9b10b11...b32的实数形式
(-1) s x 2 e-127 x (1.f) 2
where s = b 1 , e = (b 2 ...b 9 ) 2 , and f = b 10 b 11 ...b 32 .
符号位 | 偏移指数 | 正常数字尾部的分数 |
1 bit | 8 bits | 23 bits |
s | e | f |
需要注意的是,尾部的分数部分由一个隐藏位和实际尾部数字共24位二进制数存储。
32位的双精度数
32位机的双精度模式会将两个字表示为 b 1 b 2 b 3 ...b 12 b 13 b 14 ...b 64 的实数形式
(-1) s x 2 e-1023 x (1.f) 2
where s = b 1 , e = (b 2 ...b 12 ) 2 , and f = b 13 b 14 ...b 64 .
符号位 | 偏移指数 | 尾部的小数 |
1 bit | 11 bits | 52 bits |
s | e | f |
尾部的分数部分由一个隐藏位和实际尾部数字共53位二进制数存储。
32位机浮点数的十进制值:
单精度 | 双精度 | |
Machine epsilon | 2 -23 or 1.192 x 10 -7 | 2 -52 or 2.220 x 10 -16 |
最小正数 | 2 -126 or 1.175 x 10 -38 | 2 -1022 or 2.225 x 10 -308 |
最大正数 | (2- 2 -23 ) 2 127 or 3.403 x 10 38 | (2- 2 -52 ) 2 1023 or 1.798 x 10 308 |
最小负数 | 2 -150 or 7.0 x 10 -46 | 2 -1075 or 2.5 x 10 -324 |
十进制精度 | 6 位标识 | 15 位标识 |
(Machine epsilon:大于1的机器所能表示的最小浮点数;Smallest subnormal:低于最小值?无穷小?)
(In computer science, denormal numbers or denormalized numbers (now often called subnormal numbers) fill the underflow gap around zero in floating-point arithmetic. Any non-zero number with magnitude smaller than the smallest normal number is 'subnormal'.)
IEEE标准舍入
通常使用舍入到最近值的方式。基本上,给定一个实数x,它正确的舍入值是最接近x的浮点数fl(x)。
IEEE浮点标准的特殊值
单精度表示
标志位 | 指数偏移 | 小数部分 | |
1 bit |
8 bits |
23 bits |
|
7/4 | 0 | 0 1 1 1 1 1 1 1 | 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
-34.432175 | 1 | 1 0 0 0 0 1 0 0 | 0 0 0 1 0 0 1 1 0 1 1 1 0 1 0 1 0 0 0 1 1 0 0 |
-959818 | 1 | 1 0 0 1 0 0 1 0 | 1 1 0 1 0 1 0 0 1 0 1 0 1 0 0 1 0 1 0 0 0 0 0 |
+ 0 | 0 | 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
- 0 | 1 | 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
macheps | 0 | 0 1 1 0 1 0 0 0 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
"smallest" | 0 | 0 0 0 0 0 0 0 1 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
"largest" | 0 | 1 1 1 1 1 1 1 0 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 |
infinity | 0 | 1 1 1 1 1 1 1 1 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 |
NaN | 0 | 1 1 1 1 1 1 1 1 | Not all 0s or 1s |
2 -128** | 0 | 0 0 0 0 0 0 0 0 | 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
(macheps = machine epsilon,infinity:无穷大)
**这些是非标准数。这些数计算机可以表示,但是相比于正常值,它们的精度要低一些。