在下面的代码部分:
我想生成一个 0 到 1 范围内的随机数“U”, 然后我计算一个具有 log 的方程
错误是:U 的某些值使等式中的对数给出“不是数字”值
我尝试将“U”转换为 float 或 double ,甚至四舍五入到小数点后两位,但出现同样的错误
vector <double>Xs;//random Xs
double x;
double U;
while (check_arr < 360)
{
U = ((rand() / RAND_MAX) * 100) / 100;
x = (log10(1 - U)) / (-1 / a);
Xs.push_back(x);
}
最佳答案
您的代码存在多个问题。
rand() 返回一个整数,而 RAND_MAX 是一个整数,所以当你将它们相除时,你得到一个几乎总是零的整数(因为 rand() 可以产生值 RAND_MAX - 在我的 2^31 中有一次计算机 - 该部门将产生 1)。
接下来,乘以再除以 100 是无效的。结果将是相同的:一个几乎总是 0 的整数,有时是 1。
最后,你必须避免取 log10 为零。此值是不允许的,并且会引发被零除异常(此外,负值会引发无效浮点异常)。
也许您可以改用以下表达式:
U = (rand() % 100)/100.0;
这将为您提供 U 值,其分布范围为 0.00 到 0.99(含)。然后,当您采用 log10(1-U) 时,您不会得到异常。
关于c++ - log 和 rand() 给出的不是数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33026604/