如何解决为什么 pow 函数似乎出现故障?
对于以下代码:
int digsum(ll num) { //function to calculate sum of digits
if (num < 0)
num = abs(num);
int ans = 0;
while (num != 0) {
ans = ans + num % 10;
num = num / 10;
}
return ans;
}
int main() {
ios_base::sync_with_stdio(0); cin.tie(0);
int a,b,c,cnt = 0;
long long x;
cin >> a >> b >> c;
for (int i = 0; i <= 72; i++) {
x = (b * (pow(i,a))) + c;
if (i == digsum(x) && x < mod) {
cout << x << " ";
}
}
return 0;
}
分别在a,c = 3,2,8
和i=19;
的情况下
pow(19,3)
应该计算 19^3 但是当我用 (19x19x19) 替换 pow
时,这个特定情况得到了满足,而 pow
函数不是这种情况。
有人能解释一下是什么问题吗?
解决方法
我的超能力表明您的标准库对 pow
的实现并不精确。我记得不久前关于这个主题的讨论。请记住,pow
返回一个浮点值。我无法重现它,但由于它的优化方式,这完全有可能是您对 pow(19,3)
的调用返回 6858.999999999
或类似的。
确实,这 this page 说明了很多:
由于浮点数的舍入错误,pow() 的结果可能不精确(即使您传递的是整数或整数)。
此外,这个 question and answer 暗示了同样的事情。
我不会怀疑它,但你去了。
考虑将此作为一种解决方法:
long long power = nearbyint(pow(i,a));
x = b * power + c;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。