中易网

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

答案:3  悬赏:10  
解决时间 2021-02-02 02:41
不是说float和double都是7位精度么?那为什么可以精确到小数点后更多的位数?默认的精度是6位,那7位精度是什么意思啊?

有效数字是从左边第一位不为0的数开始算么?float型是7位有效数字,那是不是输入更多的数字时它都只能显示7位呢?
最佳答案
*****你提的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 ;

*****对于“那是不是输入更多的数字时它都只能显示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. 最后输出结果.
全部回答
两者位数不一样 一个是单精度 一个是双
可以这样定义 a=dlbarr(2) a[0] = 40411323.654d a[1] = 42583654.878d 或者直接 a = [40411323.654d,42583654.878d] 如果不写d,小数默认是float类型,就会损失精度 对于你这样的情况,idl先解析40411323.654成float类型,就是40411324.000,再强制转换到double,前一步已经损失精度了 可以使用print,a,format='(f0.3)'查看小数点后三位有效数字
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
逸清这名字能得多,分?
浙江金满福门业在什么地方啊,我要过去处理事
长城m4大灯怎么开?
签了三方协议但是用人单位不接收户口和档案学
鸿兴牛肉面地址在哪,我要去那里办事
幼儿园数学教育目标的制定具有哪些意义
通源运输公司地址在什么地方,想过去办事
周公解梦破解大全查询上厕所被人看到
静态库和动态库的区别
中山到佛山的汽车票多少钱
扎达盖地址在哪,我要去那里办事
在需要密封的环境里,怎么让电线不漏气?(现
贵州东海钢结构有限公司地址在哪,我要去那里
我刚来到一个新班,一个人都不认识!但是这个
给属鼠的女孩起名
推荐资讯
天会亮心会暖什么意思
群克尔这个地址在什么地方,我要处理点事
交了水费,后来查询说没交怎么办?
(首先非常感谢您上次的回答) 1、请问绿道山
为努力点赞作文800字 叙事文
宁乡县双江口中心卫生院地址在哪,我要去那里
我的世界怎么和玩家共同拥有领地
如何做白菜猪肉饺子馅
农商卡丢了信用社能补吗
网友们对国家和高校的招生政策畅所欲言,纷纷
古代请个干体力活的人叫什么
总机厂小区地址有知道的么?有点事想过去
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?