float 有效数字问题 5

floatc=1111111.123456789;printf("%f\n",c);为什么打印结果是1111111.125000;有效数字六位,是指小数点后六位精确吧?怎... float c=1111111.123456789 ;
printf("%f\n",c);
为什么打印结果是1111111.125000;
有效数字六位,是指小数点后六位精确吧?怎么全零了?
float c=1111.123456789 ;
这个打印出来却是1111.123413 ;迷糊了。。到底精确到哪里了。。怎么数都有问题。。
展开
 我来答
eiilpux17
推荐于2017-09-13 · TA获得超过802个赞
知道小有建树答主
回答量:424
采纳率:0%
帮助的人:404万
展开全部
%f输出格式的确是以6位小数输出的。
但是计算机存储小数,则存在有效数字这一说,7位有效数字指的是只能保证7位的有效数字,如果输入的有效数字多于7位,则不保证之后的位的数字的准确性。当然,你输入的数能保证了准确性。
如果输入的数据多余七位有效数字,就会出错。比如1234567.8,输出后则会出现小数部分部分数字的不正确。
当然计算机处理这类精度问题是比较奇怪的,保证了四舍五入后的正确性,也基本上保证了计算的正确性。但是在计算方面,比如很大的数加上一个很小的数就会出现误差。这样也是为了减小一定的代价。所以在存储浮点型数据时,最好用double型。
你可以试试百度一下有关计算机存储小数的方式和精度误差之类的,会有比较好的解释
邢以彤铎骊
游戏玩家

2019-09-22 · 非著名电竞玩家
知道大有可为答主
回答量:1.2万
采纳率:25%
帮助的人:747万
展开全部
%f输出格式的确是以6位小数输出的。
但是计算机存储小数,则存在有效数字这一说,7位有效数字指的是只能保证7位的有效数字,如果输入的有效数字多于7位,则不保证之后的位的数字的准确性。当然,你输入的数能保证了准确性。
如果输入的数据多余七位有效数字,就会出错。比如1234567.8,输出后则会出现小数部分不正确。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kingson729
2014-10-09
知道答主
回答量:3
采纳率:0%
帮助的人:1780
展开全部
float用24位二进制表示有效数字(一位隐藏)。不考虑溢出时:float型换算成10进制,至少7位(最多8位)有效数字,至少前6位(最多前7位)是可信的;10进制转换成float型,至少前8位(最多前9位)起作用。所以打印float型取6位有效数字,赋值给float型写9位有效数字。参考Wiki-EN词条Single-precision_floating-point_format。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-10-08
展开全部
"%f"不指定字段宽度,由系统自动指定,整数部分全部如数输出,并输出6位小数(但不是有效数字)。float的有效数是7位,不是指小数点后面的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
烟灰200
2012-10-08
知道答主
回答量:40
采纳率:0%
帮助的人:8.5万
展开全部
有效数字六位,是指小数点后六位,但六位不是精确的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式