IEEE754浮点数的表示精度探讨.doc:..IEEE754浮点数的表示精度探讨前吕从网上看到不少程序员对浮点数精度问题有很多疑问,在论坛上发贴询问,很多热心人给予了解答,但我发现一些解答中有些许小的错误和认识不当之处。我曾经做过数值算法程序,虽然基本可用,但是被浮点数精度问题所困扰;事情过后,我花了一点时间搜集资料,并仔细研究,有些心得体会,愿意与大家分亨,希望对IEEE754标准屮的二进制浮点数耕度及其相关问题给予较为详尽的解释。当然,文中任何错误由本人造成,由我承担,特此声明。1、 什么是IEEE754标准?目前支持二进制浮点数的硬件和软件文档中,几乎都声称其浮点数实现符合IEEE754标准。那么,什么是IEEE754标准?最权威的解释是IEEE754标准本身ANSI/IEEEStd754-1985《IEEEStandardforBinaryFloating-PointArithmetic》,网上有PDF格式的文件,Google—下,下载即可。标准文本是英文的,总共才23页,有耐心的话可以仔细阅读。这里摘录前言中的一句:merciallyfea引blewaysfornewsystemstoperformbinaryfloating・其实是句废话,什么也没说。IEEE754标准的主要起草者是加州大学伯克利分校数学系教授WilliamKahan,他帮助Intel公司设计了8087浮点处理器(FPU),并以此为基础形成了IEEE754标准,Kahan教授也因此获得了1987年的图灵奖。赞一句:IEEE754浮点格式确实是天才的设计。Kahan教授的主页:ht±D:〃/~wkahan/。看看其它文献怎么说。2、 IEEE754标准规定了什么?以下内容来自Sun公司的《putationGuide—SunStudio11》的中文版《数值计算指南》,并加上本人的一点说明。说实话,该中文指南翻译得不太好,例如,round译成''四舍五入〃。IEEE754规定:a) 两种基本浮点格式:单精度和双精度。IEEE单精度格式具有24位有效数字,并总共占用32位。IEEE双精度格式具有53位有效数字精度,并总共占用64位。说明:基本浮点格式是固定格式,相对应的十进制有效数字分别为7位和17位。基本浮点格式对应的C/C++类型为float和double0b) 两种扩展浮点格式:单精度扩展和双精度扩展。此标准并未规定扩展格式的精度和大小,但它指定了最小精度和大小。例如,IEEE双精度扩展格式必须至少具有64位有效数字,并总共占用至少79位。说明:虽然IEEE754标准没有规定具体格式,但是实现者可以选择符合该规定的格式,一旦实现,则为固定格式。例如:x86FPU是80位扩展粘:度,而Intel安腾FPU是82位扩展精度,都符合IEEE754标准的规定。C/C++对于扩展双精度的相应类型是longdouble,但是,MicrosoftVisualC++,longdouble和double—样,都是64位基本双精度,只能用其它C/C++编译器或汇编语言。c) 浮点运算的准确度要求:力口、减、乘、除、平方根、余数、将浮点格式的数舍入为整数值、在不同浮点格式之间转换、在浮点和整数格式
IEEE754浮点数的表示精度探讨 来自淘豆网m.daumloan.com转载请标明出处.