我基本上是试图找到2与5e + 8除以3得到的商的乘积。我尝试了几种方法,如GNU C ++ 17的代码段所示,仅在方法2和方法4。我最初是希望这是一种溢出情况,但是一个有符号的int可以存储的最大数量略大于2e + 9,这比我正在处理的数字大得多,所以我认为可能是其他问题。如果有人可以提供帮助,那就太好了。在此先感谢:)
using namespace std;
int main(){
// I basically wan't to calculate: 2 * 500000000/3 ( 2 * 5e+8 / 3)
// Approach 1
cout<<2 * 500000000 / 3<<"\n"; // output : 333333333 (nine 3s) WRONG!
// Approach 2
int a = 500000000/3; // output : 333333332 (eight 3s) CORRECT!
cout<<2 * a<<"\n";
// Approach 3
a = 2 * 500000000/3; // output : 333333333 (nine 3s) WRONG!
cout<<a<<"\n";
// Approach 4
cout<<500000000 / 3 * 2<<"\n"; // output : 333333332 (eight 3s) CORRECT!
}
我们可以验证两个答案是否确实正确。
操作顺序很重要。计算2 * 500000000 / 3
时,它等于