gpt4 book ai didi

c - 为什么一段代码在迭代一定次数后会一直不停地运行?

转载 作者:太空宇宙 更新时间:2023-11-04 01:44:42 24 4
gpt4 key购买 nike

请考虑这个 C 代码

void main() {
int i, s = 17;
for (i = 8; i < 2000000; i++) {
if (ifprime(i))
s += i;
}
printf("%d", s);
}

它不会以这个迭代次数运行,但会产生一些迭代次数较少的结果,如 while (i < 200000)

这是为什么?

(请注意,我不是在寻求解决方案,非常感谢)

最佳答案

这将溢出 32 位整数。这是未定义的行为,虽然这通常不会导致您的程序无休止地运行,但这是有可能的,因为无法保证当您的程序表现出未定义的行为时会发生什么。请尝试使用 long long,它至少是 64 位(对于签名版本,至少是 63 位和一个符号位)。

long long s = 17;

然后这样打印:

printf("%lld", s);

这个未优化的质数搜索版本将花费相当长的时间来搜索所有 2000000 以内的数字,因此您可能只是认为它会无休止地运行,但实际上并非如此。我建议通过将类似 if (i % 1000 == 0) printf("%d %lld\n", i, s); 的打印放入循环中进行调试,然后你可以看到有多远沿着它是,如果它还在工作。对我来说,它正在工作(当然,通过 long long 修复)。

关于c - 为什么一段代码在迭代一定次数后会一直不停地运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55935460/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com