C语言 为什么我算出来的值和答案少1

 我来答
wenqing8585
2015-07-28 · TA获得超过8252个赞
知道大有可为答主
回答量:8078
采纳率:70%
帮助的人:3845万
展开全部
少1的原因是浮点数在计算机里存储的方式导致它的值不准,也就是说0.03存储在计算机里的值可能只是约等于0.03,具体原因你可以查一下float和double型的存储格式的资料。
所以如果你想要得到期望的结果,必须全部使用整型类型进行计算,也就是在得到a的值以后,把所有的比较和计算都放大1000倍进行,例如:
if(a<100000000) t=100*a;
之后打印t的时候,再缩小1000倍,打印t/1000
后思琪ra
2015-07-28 · TA获得超过394个赞
知道小有建树答主
回答量:899
采纳率:0%
帮助的人:340万
展开全部
改成long int 试下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
双子吸引定律
2015-07-27
知道答主
回答量:27
采纳率:0%
帮助的人:10.3万
展开全部
把t设为单精度浮点型float试试。
追问
但是题目要求整型怎么破改成float就可以
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小心五五开哇
2015-07-27 · 超过40用户采纳过TA的回答
知道小有建树答主
回答量:217
采纳率:0%
帮助的人:78.1万
展开全部
自己学着调试调试呗
更多追问追答
追问
求破啊,我输了好几个值都是少了1
本来是29000他输出28999
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
llhome70
2015-07-27
知道答主
回答量:11
采纳率:0%
帮助的人:1万
展开全部
你用的是什么编译系统?
追问
codeblocks
追答
不同的编译系统给出的答案也是不一样的,很多编译系统进行了优化,因此得到的正确值29000。而Codeblocks没有对代码进行优化,正如您采纳的答案中说的,因为浮点数存储的不完全精确性造成最后结果又一定误差。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式