为什么我会得到“浮点异常”

时间:2017-05-31 20:24:51

标签: c++ exception greatest-common-divisor

不要求解决方案或任何事情,只是一般性问题。当调用getgcd()函数时,我得到一个浮点异常。为什么是这样?我研究了这个,但找不到直接的答案。谢谢,下面是我正在使用的代码。

 #include <iostream>
using namespace std;

class D: public E {
private:
        int var2;

public:

        D(int var, int var2) : E(var) {
                var2 = var2;
        }

        void getgcd() {
                int temp;
                int newVar = E::var;
                while (var != 0) {
                        temp = newVar % var2;
                        newVar = var2;
                        var2 = temp;
                }
                cout << "The GCD of " << newVar << " and " << var2 << " is " << var2 << endl;
        }
};

#include <iostream>
#include "A4p2.cpp"
#include "A4p3.cpp"
using namespace std;

int main(int argc, char *argv[]) {
        int x, y;
        x = atoi(argv[1]);
        y = atoi(argv[2]);

        if (x < 1 || x > 50) {
                cout << "Input must be between 1-50" << endl;
                exit(0);
        }

        E test(x);
        D test1(x, y);
        test.play();
        test1.getgcd();
        return 0;
}

1 个答案:

答案 0 :(得分:2)

不幸的是,Linux在SIGFPE上将整数除法/模数映射为零,然后将其天真地打印为&#34;浮点异常&#34;。我不认为我曾经看到它来自浮点运算(可能是因为大多数FP异常必须明确打开,而整数除零总是在x86上出错)。

很可能

var2等于零
temp = newVar % var2;

反过来,这可能是因为在该循环中,您正在检查var但是正在使用/修改var2

while (var != 0) {
        temp = newVar % var2;
        newVar = var2;
        var2 = temp;
}

您可能想要while (var2 != 0)