首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >G++编译的问题:为什么5/18返回零?

G++编译的问题:为什么5/18返回零?
EN

Ask Ubuntu用户
提问于 2014-05-09 22:15:51
回答 1查看 59关注 0票数 -1

我在G++中发现了一个有趣的问题:

当我使用罪恶(50*3.14/180)时,我得到了大约0.766的东西,而罪恶(5/18*3.24)给了我0.000。

这不是完全一样的吗?以前有人发现过吗?

提前谢谢你的回答。

EN

回答 1

Ask Ubuntu用户

发布于 2014-05-09 22:39:03

这和Ubuntu无关但是..。

原因是表达式5/18*3.24被编译(在本例中是预计算的,但是结果与(5/18)*3.24相同),并从左向右解释。

现在,(5/18)是两个整数之间的一个操作,并返回5到18之间的整数除法,即0(带有余数5,但您没有要求它)。当你把0和3.14相乘时,操作是混合的,所以(int)0被提升到(double)0.0,结果是,0.0 --和预期的一样。

在另一种情况下,50*3.14/180,首先计算50*3.14(int)50被提升到(double)50.0,一切都很好。

寓意:对常量始终使用正确的格式。5的意思是(int)55.0的意思是(double)5.05L的意思是(long int)509的意思是你不知道C/C++。

PS作为附带说明,这种行为是从python2到python3的重大变化之一。如果你好奇的话,可以在网上搜索from __future__ import division

票数 2
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/463627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档