我在G++中发现了一个有趣的问题:
当我使用罪恶(50*3.14/180)时,我得到了大约0.766的东西,而罪恶(5/18*3.24)给了我0.000。
这不是完全一样的吗?以前有人发现过吗?
提前谢谢你的回答。
发布于 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)5,5.0的意思是(double)5.0,5L的意思是(long int)5,09的意思是你不知道C/C++。
PS作为附带说明,这种行为是从python2到python3的重大变化之一。如果你好奇的话,可以在网上搜索from __future__ import division。
https://askubuntu.com/questions/463627
复制相似问题