Неожиданное исключение с плавающей точкой - c ++ - PullRequest
0 голосов
/ 14 октября 2018

Эта программа должна вычислять наименьшее общее кратное.Это не представляет деление на ноль, ни странные операции (насколько я знаю), но в какой-то момент оно ломается.Программа, похоже, возвращает "Floating point exception (core dumped)" для любой пары значений.* Условие: a> = 1 и b> = 1. Код:

int mcd(int x, int y) { //computes greatest common divisor
    if (x == 0) return y;
    return mcd(y, x % y);
}

int mcm(int x, int y) { //computes smallest common multiple
    return x * y / mcd(x, y);
}

int main() {
    int a, b;
    int counter = 0;
    while (cin >> a >> b) {
        ++counter;
        cout << "#" << counter
        << " : " << mcm(a, b) << endl;
    }
}

Что вызывает такое поведение?

1 Ответ

0 голосов
/ 14 октября 2018

Вы делите на ноль, потому что ваше условие остановки в строке 2 неверно.Правильный:

if (y == 0) return x;

Источник: Евклидов алгоритм

...