关于浮点型的有效数字和精度的问题

不是说float和double都是7位精度么?那为什么可以精确到小数点后更多的位数?默认的精度是6位,那7位精度是什么意思啊?有效数字是从左边第一位不为0的数开始算么?f... 不是说float和double都是7位精度么?那为什么可以精确到小数点后更多的位数?默认的精度是6位,那7位精度是什么意思啊?

有效数字是从左边第一位不为0的数开始算么?float型是7位有效数字,那是不是输入更多的数字时它都只能显示7位呢?
展开
 我来答
百度网友46d2a63
推荐于2017-09-12 · TA获得超过572个赞
知道小有建树答主
回答量:85
采纳率:0%
帮助的人:153万
展开全部
*****你提的5个问题,给你分别简单分析一下.

*****对于精度是6位或7位的问题,float型(4字节32位)精度确实是6位或7位,而double型(8字节64位)精度是15或16位. 你可以具体测试一下:
float m_float = 123.45678 ;
double m_double = 1234567890.1234567 ;
cout << "m_float = " << m_float << endl ;
cout << "m_double= " << m_double<< endl ;
结果是不是:m_float = 123.4568 ; // 有的机器估计是123.457
*****m_float = 1234567890.123457 ; /* 有的机器估计是1234567890.12346 */

*****对于“那是不是输入更多的数字时它都只能显示7位呢?”的说法,“显示”一词说得不恰当,你输入再多的数字,在进入float或double内存的四个字节后都将被截短. 你再调用这个float变量时它已经丢失了过量的精度,并不是什么显示问题.

*****其实浮点型的输入值iFloat在存入内存前,由硬件做了一个系列操作. 首先计算出唯一的n值,使得 2^n <= iFloat <= 2^(n+1). 然后用iFloat除于2^n得到一个大于1小于2的小数decimal. 对于float型,用其中的最高位存正负号,次高8bits存储n值,低23位存小数decimal. 低23位权值分别为:0.5、0.25、0.125...2^e, 其中e= -1,-2,-3...-23. 而2^(-23)决定了小数部分decimal的精度有限.

*****反过来,从内存读取float,硬件也做对应的一个系列操作. 读取最高位表示正负号,读取次高8位并计算出结果E然后继续作为2的指数算出一个整数Z(2^E),小数部分按位加权得到一个大于0小于1的数D,用小数D乘于Z. 最后输出结果.

参考资料: 自己琢磨的。如有不明之处,可参考:http://zhidao.baidu.com/question/49681882.html

北京埃德思远电气技术咨询有限公司
2023-07-25 广告
潮流计算是一种用于分析和计算电力系统中有功功率、无功功率、电压和电流分布的经典方法。它是在给定电力系统网络拓扑、元件参数和发电、负荷参量条件下,计算电力系统中各节点的有功功率、无功功率、电压和电流的实际运行情况。潮流计算主要用于研究电力系统... 点击进入详情页
本回答由北京埃德思远电气技术咨询有限公司提供
天梦半纯唯19
2008-03-28 · TA获得超过1265个赞
知道小有建树答主
回答量:1348
采纳率:0%
帮助的人:1296万
展开全部
两者位数不一样

一个是单精度

一个是双
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式