c语言程序,请问为什么我用float时会出现误差

如图,我把x,y定义成float时小数点后面总会出现误差,而定义成double时就不会出现误差,为什么?float不是有6位有效数字的准确性吗?... 如图,我把x,y定义成float时小数点后面总会出现误差,而定义成double时就不会出现误差,为什么?float不是有6位有效数字的准确性吗? 展开
 我来答
小城小阅
2013-10-28 · TA获得超过1180个赞
知道小有建树答主
回答量:260
采纳率:0%
帮助的人:255万
展开全部
这个你得知道浮点型数据的存储格式;
我简单给你说下,具体不懂你再问我;
11.2的小数部分0.2转换为2进制则是无限循环的00110011001100110011...单精度在存储的时候用23bit来存放这个尾数部分(前面9比特存储指数和符号);同样0.6也是无限循环的;
而打印格式为%f的时候,数据会以8字节出栈!这个时候后32bit都是0,(正常来讲原数是一直循环的)所以打印出的结果就这样了;
而你定义成双精度,它本身就是8字节存储,(相比单精度存储,他后32bit是有数据的!)所以这个时候取出的8字节,四舍五入直接就是0.6!就好比你定义输出%.1f一样,也会打印出0.6,是一个道理!
不知你明白没。单精度双精度转换的时候,一般小数末位不是5的话,都会丢失数据的!原理就像上面说的一样。记得采纳哦亲!
百度网友8c35aa0
2013-10-28 · TA获得超过287个赞
知道小有建树答主
回答量:307
采纳率:100%
帮助的人:242万
展开全部
浮点数,你就别指望他给你算出你想要的值,它都讲究精确到小数点后几位的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhengchuansh
2013-10-28
知道答主
回答量:38
采纳率:0%
帮助的人:20.8万
展开全部
把输出改为printf("%.1f",y);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
与子如初见
2013-10-28 · TA获得超过1638个赞
知道小有建树答主
回答量:1117
采纳率:100%
帮助的人:803万
展开全部
不是对着呢么?
浮点型参与运算会有误差。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式