- 16
- 0
- 约6.11千字
- 约 10页
- 2021-04-09 发布于广东
- 举报
浮点数不能判等研究
摘要:在软件开发过程屮,浮点数的表示和运算一直是重点也是难 点。基于日前计算机界广泛使用的TEEE754浮点标准,针对C/C++语言中 “浮点数为什么不能判等”这个典型问题进行了分析和研究,力求给软件 开发及测试人员一个清晰的阐述,研究中得出了两个有趣的结论。
关键词:软件;编程准则;浮点数;IEEE754
中图分类号:TP301
文献标识码:A 文章编号:1672-7800 (2014) 003-0046-03
0引言
国军标5369中,明确提出“禁止对实数类型的量做是否相等的比较”。 至于为什么不能进行浮点数判等,很少有软件设计人员真正明白其深层原 因。工程实践中,往往有许多软件开发者会不小心忘记这条强制性编码准 则,在编制程序时出现错误,从而导致了意想不到的严重后果。
1典型案例描述
某软件中有如下违背该准则的代码:
经调试发现,程序并未执行软件编码人员意想之屮的flag=l的分支, 而是执行了 flag二2的分支。
2浮点不能判等原因分析
为什么浮点数不能直接判等?这与浮点数的表示方法、范围和精度、
舍入方式有关,而这些随计算机所遵循的浮点运算标准的不同而不同。
2. 1 IEEE754 标准
任何数据在计算机内存中都以二进制形式顺序存储,每一个1或0被 称为1位,一个字节是8位。比如一个16位的short int型变量的值是 3000,那么它的二进制表达式10111000c而对于浮点数,同 样的数值可以有多种表达方式,比如213. 14可以表达为21.314X10K 2. 1314X102或者0. 21314X103,小数点的浮动使得数值的表示不能惟一, 从而给数据处理带来困难。
为便于软件移植,浮点数的表示格式应该冇统一标准。1985年IEEE (Ins titute of Electrical an d El ectronics Eng in eers) 提出了 TEEE754 标准。目前绝大部分C/C++编译器都遵照该标准进行浮点运算。
2. 2浮点数表示
IEEE754标准采用科学计数法,用符号位、阶码和尾数来表示一个浮 点数,它规定底数为2,即把浮点数表示成尾数乘以2的阶码次方再添上 符号位,阶码采用移码表示,尾数采用原码表示。
标准中几种典型的浮点数格式如表1所示。前两种数据类型正好对应 C/C++语言中的float和double精度类型,或者FORTRAN语言中的real 和double精度类型。限于篇幅,本文仅对单精度和双精度这两种常用的 浮点格式进行介绍。
下面讨论浮点代码与其真值的关系。浮点类型数据在内存中的存储格 式如图1所示。对于单精度数,最高位(bit31)是符号位S,其后8位 (bit30-bil23)是阶码E,其余23位(bit22-bit0)是尾数M。对于双
精度数,最高位(bit63)是符号位S,其后11位(bit62-bit52)是阶码 E,其余52位(bit51-bit0)是尾数M。
英中,E为浮点代码中的阶码,M为尾数,bias为阶码的偏置值。阶 码为移码形式,因而阶码的真值为:阶码-阶码偏置。对于单精度数,阶 码偏置为127 (2 (8-1) -1),阶码1?254分别对应的阶码真值是-126- +127。对于双精度数,阶码偏置为1023 (2 (11-1) -1),阶码1?2046分 别对应的阶码真值是-1022?+1023。在IEEE754标准中,阶码全为0以及 全为1被保留用作特殊处理,本文不讨论标准中定义的这些特殊值。文中 介绍的浮点数,其阶码为正常值,因而均属于规格化浮点数。尾数为原码 形式,根据原码的规格化方法,最高数字位总是1, TEEE754标准采用隐 含尾数最高数位1的方法,将这个1缺省存储,使得尾数表示范围比实际 存储多一位。应注意尾数隐含的1是一位整数(即位权为20),浮点格式 表示出来的尾数是纯小数并为原码形式,因而尾数的真值为:1+尾数。接 下来通过两个例了进一步阐述浮点数表示。文屮的(data) 10代表I?进制 数data, (data) b代表二进制数data0例1:若采用IEEE短实数格式, 试求出32位浮点数代码0xCC968000的真值。解:将十六进制码转换成二 进制浮点代码形式:b 00101101000000000000000由于符号位 S是1,所以该数为负数。阶码真值二 b- (127) 10= (153) 10-( 127) 10二(26) 10 尾数真值=1+(0.b二 1+ (2-3+2-5+2-6+2-8) 10=1+ (0. 10= ( 1. 10 故该浮点数的真值为-226X 1.
您可能关注的文档
- 测量培训材料.doc
- 测量实施方案.doc
- 测量实施监理细则.doc
- 测量实验报告和心得.doc
- 测量误差及数据处理技术规范.doc
- 测量系统分析实施办法.doc
- 测量学实习报告范文精选.docx
- 测量原理的研究及应用.doc
- 测量重力加速度实验报告.doc
- 测试材料燃烧试验等级方法.doc
- 广东省广州省实验中学教育集团2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 广东省广州大学附属中学2025-2026学年八年级上学期奥班期中物理试题(解析版).docx
- 广东省广州市第八十六中学2025-2026学年八年级上学期期中物理试题(含答案).docx
- 广东省广州市第八十九中学2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 广东省广州市第二中学2025-2026学年八年级上学期期中考试物理试题(含答案).docx
- 广东省广州市第八十六中学2025-2026学年八年级上学期期中物理试题(解析版).docx
- 广东省广州市第八十九中学2025-2026学年八年级上学期期中考试物理试题(含答案).docx
- 广东省广州市第二中学2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 2026《中国人寿上海分公司营销员培训体系优化研究》18000字.docx
- 《生物探究性实验教学》中小学教师资格模拟试题.docx
原创力文档

文档评论(0)