如何解决ifx%y == 0导致我的程序什么都不输出?
当前正在研究项目euler的第三个问题,偶然发现了一个奇怪的问题,我不得不将头撞在墙上试图弄清楚。我将问题归结为这小部分代码。
#include <iostream>
int main()
{
long max = 13195;
long largestPrimeNumber = 0;
for(int i = 0; i < max; i++)
{
if(max % i == 0)
{
std::cout << "test\n";
}
else
{
std::cout << "other test\n";
}
}
return 0;
}
这个小测试程序的最终目标是,对于每个非素数输出“ test”,对于每个小于13195的素数输出“另一个测试”,如下所示:
test
test
test
test
another test
test
test
another test
我尝试了将其放入函数并在for循环中运行该函数的方法。在我添加条件(max % i == 0);
之前,它可以正常工作。关于它的一些东西似乎弄乱了代码,但我不知道是什么。
解决方法
根据C ++标准,当
max % i
为0时, i
是未定义的行为(UB)。在我的情况下,运行时会出现FPU异常,但是遇到这种情况时,程序可以执行任何操作。
实际上,允许编译器假定这种情况永远不会发生,并且如果它注意到这种情况发生,它可能会得出各种有趣的结论,甚至包括假设不可能main()
被调用。 (证明:main()
无条件采用13195 mod 0,并且由于它是UB而无法发生,因此,不能调用main()
。)
最可能的解决方法是将循环计数器从1或其他一些正数开始。
二进制
/
运算符产生商,二进制%
运算符产生第一个表达式除以第二个表达式的余数。 如果/
或%
的第二个操作数为零,则行为不确定。
-N4713 [expr.mul] / 4(强调我的意思)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。