C++ 似乎没有理由的浮点异常

C++ 似乎没有理由的浮点异常,c++,C++,我的代码在这里抛出了一个浮点异常,但我不知道为什么 int i = this -> numerator; while(i > 1){ if ((this -> numerator % i == 0) && (this -> denominator % i == 0)) { this -> numerator = this -> numerator / i; this -> denominator =

我的代码在这里抛出了一个浮点异常,但我不知道为什么

int i = this -> numerator;
while(i > 1){
    if ((this -> numerator % i == 0) && (this -> denominator % i == 0)) {
        this -> numerator = this -> numerator / i;
        this -> denominator = this -> denominator / i;
    }
    i = i - 1;
}
目标是简化一个分数。正如你所看到的,只有i和i>1才能得到mod。除法也是如此。奇怪的是,即使我注释掉while循环中的代码,它也会继续抛出错误,但是如果我完全去掉while循环,代码就可以正常工作。当我尝试使用for循环时也发生了同样的事情。我错过了什么

奇怪的是,即使我在while循环中注释掉代码,它也会不断抛出错误

那么您的问题就不在这组代码中了。到目前为止,我编译并运行的过程中没有出现任何错误

但是如果我完全摆脱while循环,代码就可以正常工作

然后,很可能在这组代码之后,您正在使用变量
i
执行某些操作,从而导致浮点异常


使用调试器运行代码以检查失败的地方。

请删除所有这些
this->
s。它们毫无意义,也会分散注意力。环路入口的
i
有多大,以及
*此
的值是多少?就这一点而言,
分子
分母
的类型是什么?显示一个不起作用的完整代码示例。注意:
int的除法/余数
0通常被报告为浮点异常。也许是代码的另一部分?如果你想简化一个分数,我建议用gcd(分子,分母)除以分子和分母。(最大公约数),这样效率更高。你可以通过以下方式获得GCD:你是对的。它告诉我在另一个成员函数中有一个错误。谢谢(一个完全不同的块,不包含i,因为我不在范围内)对,然后接受答案来结束问题。不,接受答案不会结束问题,这不是答案。但是这个问题应该并且已经结束了,因为它不符合这个网站上这个问题的要求。@Lightness:我尊重你的观点,但是,问题是“我缺少什么?”所以我的回答回答了这个问题。此外,我希望它也能学会,当事实与之相矛盾时,不要相信看似显而易见的假设。无论如何,你是对的,这个问题是一个话题,我不恰当地使用了“结束”这个词。