Исключение с плавающей точкой, вызванное rand () в c ++ - PullRequest
3 голосов
/ 22 февраля 2010

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

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

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 ]

5 голосов
/ 22 февраля 2010

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

4 голосов
/ 22 февраля 2010

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

...