在C语言中关于float型有一处不明:就是单精度的有效位数是7位,为什么在下面的例子中这8位都是准确的呢?

定义a的值为123456.789e5;b的值为a+20理论应该得到的值为12345678920而一个实型变量只能保证的有效数字是7位有效数字,后面的数字是无意义的,并不能... 定义a的值为123456.789e5;b的值为a+20
理论应该得到的值为12345678920而一个实型变量只能保证的有效数字是7位有效数字,后面的数字是无意义的,并不能准确表示该数。运行程序得到的a和b的值都是12345678848.000000
为什么本应该有7个有效数字,这里却是前8位都一样呢???
谢谢!!!!
展开
 我来答
忘至白葬不情必0T
2006-09-08 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:90%
帮助的人:1.2亿
展开全部
因为计算机保存浮点数时,是把数看作a*2^b这样的形式,不是以10为底数,而是以2为底数。即将数转换成以2为底的“科学计数法”的形式,再由这个形式反转换成10进制形式,但数据又有位数限制,所以有些数转换成二进制计数法形式后位数超出了限制的位数,那么转换回来时得到的数就会与原数有偏差,不同的数这个偏差是不同的,有可能在小数点后第7位,也有可能在第8位,也有可能在其他位数,但能保证第6位之前是正确的。
richardbao2000
2006-09-08 · TA获得超过5342个赞
知道大有可为答主
回答量:4457
采纳率:100%
帮助的人:3892万
展开全部
它是说保证7位准确,并不是说第8位就肯定不准确。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chief_lfw
2006-09-08 · TA获得超过481个赞
知道小有建树答主
回答量:473
采纳率:0%
帮助的人:458万
展开全部
Type Exponent length Mantissa length
float 8 bits 23 bits
浮点数的有效位:23Bits,合24位
其分辨率为:1/(2^24)=0.000,000,059,604644775390625
=0.000,000,06
即浮点数可表示的最小数的单位为0.000000059604644775390625;
其他的数都由0.000000059604644775390625 * 2^X来表示的,
12345678920
12345678900
000000059604644775390625
=12345678848
12345678848=0.000000059604644775390625 * 2^X
具体计算略,原理如此
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式