如何解决表达式计算不正确
我编写了这段代码,可以正确评估所有内容,直到获得这组特定的数字为止:
#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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。