Исключение с плавающей точкой, вызванное 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
нуль? Если так, то это исключение деления на ноль.