表达式计算不正确
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所以你可以验证
一个解决方案可以改用长数字
#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
我编写的这段代码已正确评估了所有内容,直到这组特定数字:
#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所以你可以验证
一个解决方案可以改用长数字
#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