C++ 表达式不是';计算不正确
我编写的这段代码正确地计算了所有内容,直到出现以下特定数字:C++ 表达式不是';计算不正确,c++,overflow,C++,Overflow,我编写的这段代码正确地计算了所有内容,直到出现以下特定数字: #include <cmath> int n1 = 187972 ; int n2 = 12026 ; double a = 0.002 ; int partial = round((n1*n2)*a) ; int result = n1 - partial ; #包括 int n1=187972; int n2=12026; 双a=0.002; int部分=圆形((n1*n2)*a); int结果=n1-部分; 程
#include <cmath>
int n1 = 187972 ;
int n2 = 12026 ;
double a = 0.002 ;
int partial = round((n1*n2)*a) ;
int result = n1 - partial ;
#包括
int n1=187972;
int n2=12026;
双a=0.002;
int部分=圆形((n1*n2)*a);
int结果=n1-部分;
程序返回的结果是4256804,这是完全错误的。我想我弄错了,但我看不出是怎么回事。正如评论中所建议的那样,结果是正确的,因为n1*n2溢出了int max值,因此溢出产生了一个负数 实际上
-2034416024
这里是ideone,您可以验证
一个解决方案是使用长数字来代替#include
#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
int n1=187972;
int n2=12026;
双a=0.002;
长部分=圆形((n1*n2)*a);//新的
长结果=n1-部分;//新的
看起来像n1*n2
溢出int
2260551272
2147483647
(又称int\u MAX
)注意,有几种方法可以避免溢出:我不确定“正确”是什么意思。溢出int
是UB。不需要环绕(至少在c++20 iirc之前)。