3+4浮点数的表示范围几种特殊状态_第1页
3+4浮点数的表示范围几种特殊状态_第2页
3+4浮点数的表示范围几种特殊状态_第3页
3+4浮点数的表示范围几种特殊状态_第4页
3+4浮点数的表示范围几种特殊状态_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本节内容IEEE754浮点数表示范围&几种特殊状态研/CSKAOYAN本节总览研/CSKAOYANIEEE754:规格化浮点数、特殊状态的浮点数IEEE754标准规定:规格化浮点数解读方法:•

符号:0正1负•

阶码:真值=按无符号整数解读阶码,再减偏置值•

尾数:小数点前面隐含一个

1仅当阶码不全为0

、也不全为1时,表示这是一个“规格化浮点数”阶码全为0、全为1

留作特殊用途,需要按照特殊的方式去解读真值1bit8bit23bitfloat阶码偏置值127符号阶码尾数float:32位单精度浮点数1bit11bit52bitdouble阶码偏置值1023符号阶码尾数double:64位双精度浮点数研/CSKAOYAN特殊状态的浮点数(阶码全0或

全1)值的类型单精度float(32位)双精度double(64位)符号阶码尾数值符号阶码尾数值正零0全0全0+00全0全0+0负零1全0全0−01全0全0−0非规格化正数0全0𝑓≠02!"#$(

0.𝑓)0全0𝑓≠02!"%##(0.𝑓)非规格化负数1全0𝑓≠0−2!"#$(0.𝑓)1全0𝑓≠0−2!"%##(0.𝑓)正无穷大0全1全0+∞0全1全0+∞负无穷大1全1全0-∞1全1全0-∞无定义数(非数)0或1全1𝑓≠0NaN0或1全1𝑓≠0NaN阶码全为0、全为1

留作特殊用途,需要按照特殊的方式去解读真值研/CSKAOYANIEEE754:规格化浮点数的表示范围⚠注意:规格化浮点数的阶码不全为0、也不全为1单精度1bit8bit23bit规格化尾数→1.XXXXXXXXXXXXXXXXXXXXXXXfloat型符号s阶码e尾数f移码转真值:先按“无符号整数”解读阶码二进制串,再减掉偏置值,得到真值先按无符号数解读阶码e,则取值范围为

1~254减掉偏置值

127阶码的真值取指范围为

-126~127研/CSKAOYANIEEE754:规格化浮点数的表示范围⚠注意:规格化浮点数的阶码不全为0

、也不全为1单精度1bit8bit23bit规格化尾数→1.XXXXXXXXXXXXXXXXXXXXXXXfloat型符号s阶码e尾数f阶码的真值取指范围为

-126~127【符,阶,尾】1,11111110,11…111,00000001,00…000,00000001,00…000,11111110,11…11二进制”科学计数法”-1.11111111111111111111111×2127-1.0×2-126零+1.0×2-126+1.11111111111111111111111×2127可表示的负数−1.0×*2!"#$可表示的正数规格化浮点数规格化浮点数+1.0×*2!"#$+

2−2!#&

*×*2"#'数轴十进制→−

2−2!#&

*×*2"#'研/CSKAOYAN【真题训练】2018年真题_14【2018真题_14】1,11111110,11…111,00000001,00…000,00000001,00…000,11111110,11…11-1.11111111111111111111111×2127-1.0×2-126零+1.0×2-126+1.11111111111111111111111×2127可表示的负数−1.0×*2!"#$可表示的正数规格化浮点数规格化浮点数+1.0×*2!"#$+

2−2!#&

*×*2"#'数轴十进制→−

2−2!#&

*×*2"#'研/CSKAOYANIEEE754:

浮点数的上溢(Overflow)【符,阶,尾】1,11111110,11…111,00000001,00…000,00000001,00…000,11111110,11…11二进制”科学计数法”-1.11111111111111111111111×2127-1.0×2-126零+1.0×2-126+1.11111111111111111111111×2127可表示的负数正下溢可表示的正数负上溢规格化浮点数负下溢规格化浮点数正上溢数轴十进制→−

2−2!#&

*×*2"#'−1.0×*2!"#$+1.0×*2!"#$+

2−2!#&

*×*2"#'运算结果大于最大规格化正数时称为正上溢,小于绝对值最大的规格化负数时称为负上溢。正上溢、负上溢

统称上溢(Overflow)

,也会翻译为

“溢出”浮点数上溢(溢出)的处理:①

浮点数运算部件将运算结果设为设置为+∞或-∞②

设置浮点数溢出异常标志位(例如:x86会将浮点运算单元FPU的OE标志位OverflowException置为1)注:

IEEE754规定,默认不响应浮点数溢出异常,不中断程序;除非程序员手动开启此类异常响应研/CSKAOYANIEEE754:无穷大的表示值的类型单精度float(32位)双精度double(64位)符号阶码尾数值符号阶码尾数值正无穷大0全1全0+∞0全1全0+∞负无穷大1全1全0-∞1全1全0-∞float+∞0

11111111

000000000000000000000000x7F800000double−∞1

11111111

000000000000000000000000xFF800000?研/CSKAOYAN【程序示例】两个最大规格化正浮点数相加发生上溢0,11111110,11…11+∞

0,11111111,00…00程序员可手动检查浮点数运算结果是否溢出,也可选择忽视溢出+

2−2!"#

$×$2$"%运行结果研/CSKAOYANIEEE754:

浮点数的下溢(Underflow)【符,阶,尾】1,11111110,11…111,00000001,00…000,00000001,00…000,11111110,11…11二进制“科学计数法”-1.11111111111111111111111×2127-1.0×2-126零+1.0×2-126+1.11111111111111111111111×2127可表示的负数正下溢可表示的正数负上溢规格化浮点数负下溢规格化浮点数正上溢数轴十进制→−

2−2!#&

*×*2"#'−1.0×*2!"#$+1.0×*2!"#$+

2−2!#&

*×*2"#'若浮点数运算结果在0至绝对值最小的规格化正数之间时称为正下溢,在0至绝对值最小规格化负数之间时称为负下溢。正下溢和负下溢统称下溢(Underflow)浮点数运算结果下溢时的处理:①

若结果落入非规格化区间→用非规格化浮点数存储;若结果太小(真值逼近于0)→

按机器零存储②

若下溢至机器零,设置浮点数下溢异常标志位(例如:x86会将FPU的UE标志位UnderflowExcepLon置1)注:

IEEE754规定,默认不响应浮点数下溢异常,不中断程序;除非程序员手动开启此类异常响应研/CSKAOYANIEEE754:

浮点数的下溢(Underflow)【符,阶,尾】1,11111110,11…111,00000001,00…000,00000001,00…000,11111110,11…11二进制“科学计数法”-1.11111111111111111111111×2127-1.0×2-126零+1.0×2-126+1.11111111111111111111111×2127可表示的负数可表示的正数负上溢规格化浮点数负下溢正下溢规格化浮点数正上溢数轴⾮规格⾮规格绝对值最小的float化负数化正数绝对值最小的float非规格化负数非规格化正数1,00000000,00…001-1.0×2-149+1.0×2-1490,00000000,00…001浮点数运算结果下溢时的处理:①

若结果落入非规格化区间→用非规格化浮点数存储;若结果太小(真值逼近于0)→按机器零存储②

若下溢至机器零,设置浮点数下溢异常标志位(例如:x86会将FPU的UE标志位UnderflowException置1)注:

IEEE754规定,默认不响应浮点数下溢异常,不中断程序;除非程序员手动开启此类异常响应研/CSKAOYANIEEE754:真值0的表示值的类型单精度float(32位)双精度double(64位)符号阶码尾数值符号阶码尾数值正零0全0全0+00全0全0+0负零1全0全0−01全0全0−0float+00

00000000

000000000000000000000000x00000000double-01

00000000

000000000000000000000000x80000000?研/CSKAOYANIEEE754:非规格化浮点数的表示值的类型单精度float(32位)双精度double(64位)符号阶码尾数值符号阶码尾数值非规格化正数0全0𝑓≠02!"#$(0.𝑓)0全0𝑓≠02!"%##(0.𝑓)非规格化负数1全0𝑓≠0−2!"#$(0.𝑓)1全0𝑓≠0−2!"%##(0.𝑓)不可以将阶码解读为0-127=-127,而尾数按照0.xxxxxx…xxx解读。即

小数点是固定解读为阶码的最小真值-126前隐含0,而不是隐含1float非规格化正数示例0

00000000

01000000000000000000000真值=

0.01×2−126

→=2-128绝对值最小的float0

00000000

00000000000000000000001非规格化正数真值=

0.00000000000000000000001×2−126

→=2-149绝对值最大的float0

00000000

11111111111111111111111非规格化正数真值=

0.11111111111111111111111×2−126

→=(1−2−23)×2−126=2−126

-2-149研/CSKAOYANIEEE754:非规格化浮点数的表示值的类型单精度float(32位)双精度double(64位)符号阶码尾数值符号阶码尾数值非规格化正数0全0𝑓≠02!"#$(0.𝑓)0全0𝑓≠02!"%##(0.𝑓)非规格化负数1全0𝑓≠0−2!"#$(0.𝑓)1全0𝑓≠0−2!"%##(0.𝑓)不可以将阶码解读为0-127=-127,而尾数按照0.xxxxxx…xxx解读。即

小数点是固定解读为阶码的最小真值-126前隐含0,而不是隐含1float非规格化负数示例1

00000000

01000000000000000000000真值=-

0.01×2−126

→=-

2-128绝对值最小的float1

00000000

00000000000000000000001非规格化负数真值=

-

0.00000000000000000000001×2−126

→=

-

2-149绝对值最大的float1

00000000

11111111111111111111111非规格化负数真值=

-

0.11111111111111111111111×2−126

→=

-(1−2−23)×2−126=

-(2−126

-2-149)研/CSKAOYAN【真题训练】2023年真题_14【2023真题_14】0x80200000

=100000000010000000000000000000000000=1,00000000,01000000000000000000000↑

↑阶码全0

尾数不全为0非规格化浮点数真值=-

0.01

×2-126=-2-128研/CSKAOYANIEEE754:非数(NaN)的表示值的类型单精度(32位)双精度(64位)符号阶码尾数值符号阶码尾数值无定义数(非数)0或1全1𝑓≠0NaN0或1全1𝑓≠0NaN在IEEE754浮点数标准中:NaN

代表“不是一个数”(NotaNumber)floatNaN示例0

11111111

10000000001110000000001sqrt函数用于计算一个数的平方根运算结果为NaN的典型例子:#include<math.h>•0除以00.0f/0.0f//NaN•负数开根号sqrt(-1.0f)//NaN•无穷减无穷∞-∞//NaN特别地:•非零数值除以01.0f/0.0f;//+∞IEEE754规定,非零数值除以0,-1.0f/0.0f;//-∞结果是无穷,0除以0结果是NaN研/CSKAOYAN【程序示例】运算结果为NaN、∞的例子判断是否为NaN

判断是否为∞程序输出:结果是:nan结果为NaN程序输出:结果是:inf结果为

无穷大研/CSKAOYAN研/CSKAOYAN【课后训练】推演double的表示范围【符,阶,尾】1,,11…111,00000000001,00…000,00000000001,00…000,,11…11二进制“科学计数法”-1.1…1(⼩数点后52bit)×21023-1.0×2-1022+1.0×2-1022+1.1…1(⼩数点后52bit)×21023可表示的负数零可表示的正数负上溢规格化浮点数负下

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论