我在 G++ 中发现了一个有趣的问题:
当我使用 sin(50*3.14/180) 时,我得到大约 0.766 的值,但是 sin(5/18*3.24) 却给出 0.000。
这难道不是一回事吗?之前有人发现过吗?
提前感谢您的回答。
答案1
这与 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
如果您感兴趣,请在网上搜索。