| |
 |
|
 |
 |
| 关于浮点数的存储 [转] | 2006-09-06 00:02:42 |
| 标签: | 缩起正文 字号:大 小 |
今天比赛正好有关浮点数IEEE 754标准的这么一题,哈哈,这种BT的关于编码的题一向是我的最爱之一
虽然以前在《编码的奥秘》里看到过这个这个标准,不过太久了,记不大清了,还是从baidu上弄来这么一段文字
通常complier都会用IEEE 754/854的规定来定义float and double 但是也有例外,但应该大部份都是遵循这规定 float 通常用 32 bits表示,double通常用 64 bits 是因为IEEE(International Electric and Electronic engineering)754/854的关系 首先要先介绍IEEE的格式: float和double(差别在M字段的长度)其格式为下: 1bits 8bits 23bits(double为 55bits) S EEEEEEEE MMMMMMMMMMMM........MMMMMM
S: sign bit,代表正负号 0为正,1为负
E: exponent,代表该数的指数字段,使用ex-128 code(ps.1) 范围为 -127~126 (-128,和127为underflow和overflow)
M: Mantissa,代表该数的值,这里注意IEEE 754/854除了规定必须将小数正规化外(ps.2)还必须将正规化的部份最前面的1省略 ex: 原本是 1.111000100000本来mantissa应该记成 1111000100000....可是在IEEE 754/854中则明定必须将前面的1省略所以mantissa字段的值就变成 111000100000.......
ps.1 Excess-code(超码表示法):顾名思义就是把0超过该表示法规定的值的码 ex:ex-3码,那在ex-3码中的3就是十进制的0,5就是十进制的2,算法就是 (将你的值 - 超码的值) = 超码表示法的值,以ex-3码为例 (5 - 3) =2,(3 - 3 ) = 0
ps.2 小数正规化:我们在储存小数时,IEEE 754/854规定必须将数字化成正规化 何谓正规化呢?我们在平常用的科学记号法,如 pi = 3.1415926, e = 2.71828 而正规化呢?就是把小数化成 1<小数 <2 之间的数字在转换成二进制最后变成 1.xxxxx * 2^exp, 这就是小数正规化
|
| 回复() | 人气() | 引用() | 推荐 | 保存日志 | 问题日志 | 收藏到网摘 | 返回圈子首页 |
|
|
 |
|
 |
|