Исключение с плавающей точкой, вызванное rand() в C++

У меня есть проблема, которую я не могу решить. Я генерирую числа случайным образом, чтобы определить, являются ли мои числа простыми в относительности.

Вот функция, которая дает мне исключение с плавающей точкой:

bool modularExponentiationTest(unsigned long long exponent, unsigned long long modulus)
{
    short index = 0;
    unsigned long long base;
    unsigned long long result;

    do
    {
            result = 1;
            base = rand() % exponent; // <--CAUSED BY THIS

            while (exponent > 0) 
            {
                if (exponent & 1)       
                        result = (result * base) % modulus;
                exponent >>= 1;
                base = (base * base) % modulus;
            }

            if (result != 1)
                return false;
    }while(++index < 10);

    return true;
}

Я сделал случайное начало в другой функции, выполнив следующее:

 srand(time(NULL));

Большое спасибо за Вашу помощь!

2 ответа

Решение

Ты меняешься exponent вправо в цикле пока он не достигнет 0.
Итак, во второй раз вы достигнете base = rand() % exponent;exponent 0, и у вас есть деление на 0

Является ли значение exponent нуль? Если так, то это исключение деления на ноль.

Другие вопросы по тегам