C++中rand()引起的浮点异常
Posted
技术标签:
【中文标题】C++中rand()引起的浮点异常【英文标题】:Floating Point Exception Caused By rand() In c++ 【发布时间】:2010-02-22 01:20:51 【问题描述】:我有一个似乎无法解决的问题。我正在随机生成数字以确定我的数字是否是相对素数。
这是给我一个浮点异常的函数:
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));
非常感谢您的帮助!
【问题讨论】:
产生了哪个“浮点异常”? 【参考方案1】:您在 while 循环中将 exponent
向右移动,直到达到 0。
所以你第二次到达base = rand() % exponent;
exponent
是0,你有一个除以0
【讨论】:
很好发现,exponent
正在降档为零,没有人可以防止它为零。
好收获。让你的论点成为常量。在函数内部更改按值传递参数隐藏了这种错误。在每种情况下执行模数之前检查零。
非常感谢!我只是没看到。【参考方案2】:
exponent
的值是否为零?如果是这样,那就是被零除的异常。
【讨论】:
你应该检查模数和指数变量是否为零,因为你对它们都进行了模数。 @Alex 你可能会更有帮助 - 生成的异常是什么,rand()
和 exponent
的值是什么?以上是关于C++中rand()引起的浮点异常的主要内容,如果未能解决你的问题,请参考以下文章