付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
浮点数的c语言存储格式
0浮点数的数值范围和有效数字个数计算机通常以二进制浮点数的形式保存实物。可是,其具体的存储格式等在有关的书籍中很难查到,多是泛泛地给出不同类型的浮点数(单精度型、双精度型、长双精度型)的十进制数的数值范围,及其大致能提供的有效数字位数。而用计算机进行数值运算时,经常需要关注有效数字的位数,即数据的精确度问题。为此查阅了美国电气电子工程师学会(IEEE)的IEEE754-1985标准,该标准给出了有关浮点数在计算机中的存储格式(多数计算机语言中浮点数的实现均参照或遵循此标准)。本文在此基础上通过C程序验证等总结了C语言中浮点数的实现机制、准确的表示范围等;并进一步讨论了浮点数的十进制数有效数字位数;论证了二进制数的位数与十进制数有效数字位数的关系。1两e表达sc1e的s意义十进制的实数R的二进制数的科学记数法可表示为:R=(-1)S×M×2E其中S表示符号,S=1表示负数,S=0表示正数。M为二进制数的系数,规范化二进制数的M形式为1.b1b2……bn。整数E为二进制数的指数。2规范性正等数尾数IEEE754-1985标准规定了float(单精度型)、double(双精度型)浮点数R的二进制存储的编码格式如下:对于float型,IEEE754-1985标准规定用32位二进制编码表示,具体如下:·最高位31位,保存符号位S,“0”表示正数,“1”表示负数。·30位~23位,共8位,移码方式(指数值加上偏移量127)保存指数部分,称为阶码。·22位~0位,共23位,保存系数部分,称为尾数,对于规范化二进制数,整数位的前导“1”不保存(隐含),直接保存小数部分b1b2…b23。并有以下规定:·若1≤E≤254,R=(-1)S×(1+0.M)×2E-127此时R为规范化数;·若E=0且M=0,R=0;·若E=0且M≠0,R=(-1)S×(0.M)×2-126此时R为非规范化数;·若E=255且M≠0,非数值的编码组合(用NAN表示);·若E=255且M=0,R溢出(用+INF、-INF分别表示正、负无穷大);对于double型,IEEE754-1985标准规定用64位表示,具体如下:·最高位63位,保存S,“0”正数,“1”负数;·62位~52位,共11位,移码方式(指数值加1023)保存指数,称为阶码;·51位~0位,共52位,保存系数部分,称为尾数,对于规范化二进制数,整数位的“1”不保存(隐含),直接保存小数部分b1b2…b52。并有以下规定:·若1≤E≤2046,R=(-1)S×(1+0.M)×2E-1023此时R为规范化数;·若E=0且M=0,R=0;·若E=0且M≠0,R=(-1)S×(0.M)×2-1022此时R为非规范化数;·若E=2047且M≠0,R非数值;·若E=2047且M=0,R溢出(无穷大);对于longdouble型,IEEE754-1985标准中没有给出具体规定。3软件设计类型通过直接输入十进制实数的方法,来验证浮点数在计算机中的存储格式将非常麻烦和不准确,如能直接输入和查看十进制数对应的二进制编码将非常方便和有效。利用C语言的union(共用体/联合体)类型,就可以很容易地实现。例如以下的公用体定义:union{floatr;//长整型与单精度型长度都是32bitunsignedlongn;}x;可用来验证float型数据。给x.r赋一实数值后,查看x.n的十六进制值,可知其存储格式;反之,给x.n一个十六进制编码,可查看其代表的浮点数值。以下的公用体定义:union{doubler;//int64与双精度型都是64bitunsignedint64n;}x;可用来验证double型数据。以下的公用体定义:union{longdoubler;//longdouble型为80bit.unsignedshortn;//用n,n,n,n,n联合输出}x;可用来验证longdouble型数据。以下是float型的部分结果:double型数据的部分结果负数的结果可比照正数部分得出,此处从略。通过程序验证发现,Borland公司的TurboC、BorlandC++及C++Builder提供的longdouble型数据是采用80位二进制表示的,其中阶码位扩展为15位,并且:·与float和double型不同,其保存尾数的63位~0位直接保存全部尾数,不采用隐去首位整数1的方法。·longdouble型数据的实现不够完整,包括:尾数的最后11位在转换到十进制数显示时没有进行完整的转换运算,似乎未充分使用;对阶码小于0x0038的数(很接近0)不完全支持;甚至有些合法的二进制编码组合转换成十进制数值时为乱码等。微软的VisualC++的longdouble型数据大概是出于兼容性考虑而提供的,内部实现完全等同于double型。因此,建议用户不使用C语言的longdouble数据类型。4浮点数的有效数字个数对于机内浮点数的保存和运算,IEEE754-1985标准要求浮点数的运算过程中使用附加位保存中间结果,最后结果的保存可以按照某种“舍入方式”进行,以确保运算过程中不降低数据精度。该标准定义了多种“舍入方式”,其中最常用的是“最接近舍入(RoundtoNearest)方式”(对于误差相同时,可以向零舍入)。实验表明,BorlandC(包括BorlandC++Builder)和VisualC++对于不超出规范化数表示范围的数据,在内部运算和转换时均采用了“最接近舍入方式”。理论上,有限位数的二进制浮点数必能转换为有限位数的十进制数;但对于有限位数的十进制浮点数,转换为二进制数不能保证是有限位数,且多数情况下不是有限位数。因此,如果提供足够的输出位数,二进制浮点数可以精确转换为十进制数,不产生转换误差。但是,由于没有一个2n与10m(n,m为整数)相等,二进制和十进制相互转换的位数没有简单的若干位对应若干位的对应关系。一般地,二进制浮点数向十进制转换都只提供若干位的近似值,并不提供全部的数字位数。事实上更主要的原因是:计算机中表示的二进制浮点数绝大多数本身就是实际数值的近似值,从有效数字的角度看,转换为十进制数时提供更多位数字并无使用价值。这里自然就有一个如何看待和精确使用数值的问题,即有效数字位数的问题。尤其对于各种数值计算,必须掌握其有效数字位数。但查阅有关资料,没有看到对计算机中浮点数的有效数字位数的准确叙述,一般仅指出float和double型大致的有效数字位数,且说法不一,没有给出依据。在此,从相对误差(误差绝对值与数值绝对值的比值)的角度给出一般性的结论。对于能转换为float型规范化二进制编码的十进制数值,其二进制编码的尾数为24位(包括一位隐含“1”),按“最近舍入方式”,则其保存的二进制浮点数的最大绝对误差为0.5×2-23×2E-127,尾数值为最小值1时的相对误差可取得最大值,为0.5×2-23=2-24,尾数值为全1时(对应的尾数为2-2-23,约为2)的相对误差可取得最小值,约为2-25;即其保存的二进制浮点数的相对误差≤2-24成立。在不考虑数据参与运算导致的误差传递等情况下(浮点数的机内运算采取了增加附加位的做法,见前述,一般能保证运算过程不降低数据精度),将保存的float型二进制数完整转换为十进制数(必定是有限位数)时,其带来的十进制数的相对误差≤2-24(约0.596×10-7)。对于具有严格的n位有效数字的十进制数D的最大绝对误差(用△max表示)为末位数字的半个单位,其最大相对误差为△max/D,显然该值>0.5×10-n。由此显然可得出相对误差≤0.5×10-n的十进制数必能提供至少n位有效数字。因此,从相对误差的大小就可确定:二进制数与其能提供的十进制数的有效数字位数的关系。我们还可以从另一个角度来理解浮点数:计算机中的二进制浮点数是一种用一个二进制编码组合(所代表的准确数值记为D,尾数的位数用m表示)代表数学上一个区间范围(D-△max)~(D+△max)的实数,这个区间的大小2△max对于不同的阶码并不一致,但区间的半宽度△max与数值D的比值介于2-m-1~2-m之间,这与最大相对误差的大小介于2-m~2-m+1之间的说法是一致的。对于float型数据能提供相对误差≤2-24(约0.596×10-7)的十进制数,由前述的推论可得到保守的结论:其十进制数的有效数字不少于6位;当首位有效数字的数值小于8时,有效数字位数不少于7位。另外,为了充分使用float型的有效数字,向计算机提供的十进制实数尽量为9位有效数字(超出9位的数字在转换时不起作用),以使计算机能更精确地转换,使误差最小。对于double型浮点数,其二进制编码的尾数为53位(包括一位隐含“1”),保存的二进制相对误差≤2-53(约1.11×10-16)。十进制数的16位有效数字的最大相对误差>0.5×10-16,因此,double型数据能提供的十进制数的有效数字不少于15位(这也是默认情况下C
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025江西省井冈山应用科技学校工作人员招聘考试试题
- 2025江苏省车辐中等专业学校工作人员招聘考试试题
- 大学校区做电气预防性试验的施工组织设计
- 初中历史教学中数字博物馆虚拟游览课程设计课题报告教学研究课题报告
- 高中生借助话语分析考察20世纪诗歌批评话语的演变特征课题报告教学研究课题报告
- 2026年5G通信网络切片技术报告及未来五至十年应用拓展报告
- 危大工程施工方案-土方开挖工程
- 2025年微生物降解行业竞争分析报告
- G网络下高中智慧校园智能学习环境中的学生自主学习策略研究教学研究课题报告
- 2026年物流业智能仓储系统分析报告
- 2026年少先队考核模拟试题及答案详解(全优)
- 中国金谷国际信托有限责任公司招聘笔试备考试题及答案解析
- 湖南 2026 政府采购评审专家续聘考试(3) 真题
- 2026天津富凯建设集团有限公司招聘工作人员招聘4人考试参考题库及答案解析
- 2025年芯片测试岗笔试题目及答案
- 预应力混凝土空心方桩08SG360
- 安宁疗护病区工作制度
- 2026年上海市杨浦区中考数学二模试卷(含解析)
- 电梯施工临时用电安全方案
- 亚克力生产车间安全讲解
- 幼儿园人文关怀工作制度
评论
0/150
提交评论