c++ - log 和 rand() 给出的不是数字

标签 c++ random vector while-loop

在下面的代码部分:

我想生成一个 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/

相关文章:

c++ - std::piecewise_linear_distribution 在 VS2012 下不工作?

java - 覆盖 equals 并将对象转换为字符串

c++ - 转换二维C数组中的std::vector数组

c++ - 使用 OpenCV 显示流有时会收到一个空帧并卡住

c++ - 在 C++ 中返回对局部变量的引用

javascript - JavaScript 中的 numpy.random.choice?

java - 制作系统托盘应用程序的有效方法

ios - 乘以随机数并打印结果

c++ - std::vector::erase() 抛出的异常

C++编译时错误: expected identifier before numeric constant