表达式计算不正确

Expression isn't computed correctly

我编写的这段代码已正确评估了所有内容,直到这组特定数字:

#include <cmath>

int n1 = 187972 ;
int n2 = 12026 ;
double a = 0.002 ;
int partial = round((n1*n2)*a) ;
int result = n1 - partial ;

程序返回结果为4256804,完全错误。我想我错了,但我看不出如何。

如评论中所建议的那样,结果是正确的,因为 n1*n2 溢出了 int 最大值,由于溢出而生成负数

实际上-2034416024

这里是ideone所以你可以验证

https://ideone.com/NIGCmx

一个解决方案可以改用长数字

#include <cmath>

int n1 = 187972 ;
int n2 = 12026 ;
double a = 0.002 ;
long long partial = round((n1*n2)*a) ;   // new
long long result = n1 - partial ;   // new