欢迎来到天天文库
浏览记录
ID:57730653
大小:17.50 KB
页数:2页
时间:2020-09-02
《单双精度概念.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、单精度浮点数在机内占4个字节,用32位二进制描述。双精度浮点数在机内占8个字节,用64位二进制描述。浮点数在机内用指数型式表示,分解为:数符,尾数,指数符,指数四部分。数符占1位二进制,表示数的正负。指数符占1位二进制,表示指数的正负。尾数表示浮点数有效数字,0.xxxxxxx,但不存开头的0和点指数存指数的有效数字。指数占多少位,尾数占多少位,由计算机系统决定。可能是数符加尾数占24位,指数符加指数占8位--float.数符加尾数占48位(C/C++是53),指数符加指数占16位(C/C++是11)--double.知道了这四部分的占位,按二进
2、制估计大小范围,再换算为十进制,就是你想知道的数值范围。对编程人员来说,double和float的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,C语言中数学函数名称double和float不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)。float尾数23,2^23=,所以有效数字是七位,但是只能保证6位,因为7位表示不了全部。C++primer也是这样说的,,double有效数字是十六位保证10位(第四版P32)。在C++中,单
3、精度浮点型(float)专指占用32位存储空间的单精度(single-precision)值。单精度在一些处理器上比双精度更快而且只占用双精度一半的空间,但是当值很大或很小的时候,它将变得不精确。当你需要小数部分并且对精度的要求不高时,单精度浮点型的变量是有用的。例如,当表示美元和分时,单精度浮点型是有用的。 在foxpro中,单精度浮点型是为了提供兼容性,浮点数据类型在功能上等价于数值型。 在VB中,Single数据类型Single(单精度浮点型)变量存储为IEEE32位(4个字节)浮点数值的形式,它的范围在负数的时候是从-3.E38到-1
4、.E-45,而在正数的时候是从1.E-45到3.E38。···浮点数7位有效数字。 双精度数16位有效数字。 float浮点数取值范围: 负数取值范围为-3.E+38到-1.E-45,正数取值范围为1.E-45到3.E+38。 double数取值范围: 负值取值范围-1.E+308到-4.E-324,正值取值范围为4.E-324到1.E+308。 C/C++中浮点数的表示遵循IEEE754标准。 一个浮点数由三部分组成:符号位S、指数部分E(阶码)以及尾数部分M(如下)。 Floating S--------E-------M 1位-----8位
5、-----23位 Double S--------E-------M 1位-----11位----52位 十进制数的换算计算公式为(n^m表示n的m次幂,B表示前面的数字是二进制): S*2^(E-127)*(1.M)B 浮点数的精度取决于尾数部分。尾数部分的位数越多,能够表示的有效数字越多。 单精度数的尾数用23位存储,加上默认的小数点前的1位1,2^(23+1)=。因为10^7<<10^8,所以说单精度浮点数的有效位数是7位。 双精度的尾数用52位存储,2^(52+1)=40992,10^16<40992<10^17,所以双精度的有效位数是1
6、6位。 另外: 如果你在PI值的有效位后增加数字的话,结果是不会变化的,由于PI值是以常数方式赋值,可以在常数后面加个'f',如PI=3.f;否则编译器会先把常数当作double类型,然后再截断后面的值变为浮点值,这样的话,就有可能PI的值会有不同,造成你看到的现象。
此文档下载收益归作者所有