欢迎来到天天文库
浏览记录
ID:59370392
大小:11.50 KB
页数:1页
时间:2020-09-04
《浮点数精度问题.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、浮点数精度问题一、浮点数的概念及误差问题: 浮点数是用来表示实数的一种方法,它用M(尾数)*B(基数)的E(指数)次方来表示实数,相对于定点数来说,在长度一定的情况下,具有表示数据范围大的特点。但同时也存在误差问题,这就是著名的浮点数精度问题! 浮点数有多种实现方法,计算机中浮点数的实现大都遵从IEEE754标准,IEEE754规定了单精度浮点数和双精度浮点数两种规格,单精度浮点数用4字节(32bit)表示浮点数,格式是:1位符号位8位表示指数23位表示尾数 双精度浮点数8字节(64bit)表示实数,格式是:1位符
2、号位11位表示指数52位表示尾数 同时,IEEE754标准还对尾数的格式做了规范:d.dddddd...,小数点左面只有1位且不能为零,计算机内部是二进制,因此,尾数小数点左面部分总是1。显然,这个1可以省去,以提高尾数的精度。由上可知,单精度浮点数的尾数是用24bit表示的,双精度浮点数的尾数是用53bit表示的,转换成十进制:2^24-1= 2^53-1=40991 由上可见,IEEE754单精度浮点数的有效数字二进制是24位,按十进制来说,是8位;双精度浮点数的有效数字二进制是53位,按十进制来说
3、,是16位。显然,如果一个实数的有效数字超过8位,用单精度浮点数来表示的话,就会产生误差!同样,如果一个实数的有效数字超过16位,用双精度浮点数来表示,也会产生误差!对于.66这个数,有效数字是24位,用单精度或双精度浮点数表示都会产生误差,只是程度不同: 单精度浮点数:.00 双精度浮点数:.00 双精度差了0.66,单精度差了近4万亿!采用IEEE754标准的计算机浮点数,在内部是用二进制表示的,但在将一个十进制数转换为二进制浮点数时,也会造成误差,原因是不是所有的数都能转换成有限长度的二进制数。对于.32这个
4、数,其有效数字是8位,按理应该能用单精度浮点数准确表示,为什么会出现偏差呢?看一下这个数据二进制尾数就明白了0001...... 显然,其尾数超过了24bit,根据舍入规则,尾数只取00,结果就变成单精度浮点数表示.,只有前8位才是有效的。
此文档下载收益归作者所有