IEEE754标准

1.IEEE754标准起源

IEEE 754由1985年电子与电气工程师协会IEEE制定,用以表示浮点数的格式,包括0INFNAN等,以及这些数值的浮点数运算符。标准的指定便于不同处理器之间程序的移植及研制更为复杂的数值运算程序等。

2.IEEE754规定

  • 尾数原码表示,小数点前隐含一个1
  • 基值隐含为2
  • 阶码移码表示,移码的偏移值有专门约定,n位移码的偏移值为011111112^{n-1}-1
  • 阶码的最大值、最小值作为特殊标记预留,用来标记某些异常事件或机器
  • 单精度、双精度;单精度扩展、双精度扩展。

3.单精度浮点数float(32bit)的表达形式


由于尾数存在一个隐含的1,尾数的数值位相当于多表示了1位,且节省了存储空间。

4.IEEE754特殊标记

IEEE754有别于一般的移码偏移量(2^{n-1})设计,而是采用2^{n-1}-1,这样设计可以使得正数多表示一个数。在8位移码的情况下所能表示的范围是-127~128,其中0000000011111111用来做特殊标记。

  • 移码为00000000时,表示非规格化尾数,此时小数点前没有隐含的1,且指数固定为-126
  • 移码为11111111时,表示INF和NAN。例如尾数数值部分全为0,则表示INF(根据符号位决定正负),其余情况则为NAN。

5.IEEE754下溢处理

假设尾数的数值位有3位,移码有3位,现有x = 1.011×2^{-1}, y = 1.001×2^{-1}
若执行以下代码

if(x - y == 0)
  cout << "x == y" << endl;
else
  cout << "x != y" << endl;

我们先口算以下减法的结果是0.010×2^{-1},即1.000×2^{-3},显然-3的移码为000,这是特殊标记,且尾数数值部分全0,则表示+0,从而会导致上述代码输出“x == y”,为了避免逻辑错误,IEEE754的解决方法是渐进下溢,用非规格化浮点数来表示接近0但不等于0的数,即将上例转化为0.100×2^{-2},这样就能用非规格化浮点数表示接近0的数了,避免出现逻辑错误。

6.IEEE754舍入模式

  • 就近舍入:舍入到最接近的可表示值;当有两个最接近的可表示值时,首选“偶数”值。
  • 朝0舍入
  • 朝+\infty舍入
  • 朝-\infty舍入

7.浮点数精度不足所带来的错误

首先来看这样一段代码

#include <stdio.h>

int main(){
  float f = 123456789;
  printf("%f\n", f);
  return 0;
}

我们预期的执行结果是123456789.000000,但实际上结果是这样的

123456792.000000

显然前7位是对的,问题出在浮点数的精度上,单精度浮点数尾数数值位有23位,再加上隐含的1,共计24位,而代码中定义的变量f是用10进制表示的,那么24位2进制能表示多少位10进制呢,答案是24lg2向下取整7,这样就能解释为什么执行结果的前7位是正确的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,997评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,603评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,359评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,309评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,346评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,258评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,122评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,970评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,403评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,596评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,769评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,464评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,075评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,705评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,848评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,831评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,678评论 2 354

推荐阅读更多精彩内容