从 C++ 中的 [0,1] 中获取随机双精度数

Get random double number from [0,1] in C++

本文关键字:获取 随机 双精度 中的 C++      更新时间:2023-10-16

我想生成随机双精度数x,其中: 0 <= x <= 1

double x = ((double) rand() / (RAND_MAX));

这是从 [0,1] 获取随机双精度数的正确方法吗?

是的,因为std::rand()同时返回0RAND_MAX。但是,如果可以使用 C++11,则可以改用std::uniform_real_distribution

另外不要忘记初始化你的随机数生成器,否则你将在每次执行中获得相同的序列。如果你使用std::randstd::srand( std::time(0) )几乎总是足够的。

是的。

不过,有些括号是多余的。

这取决于你的应用是否可以信任你的系统 rand(3) 函数。对于严肃的蒙特卡洛模拟,您将需要来自数字库中的记录良好的随机数生成器。

是的,我相信它在随后生成时会以随机顺序给你 0 和 1。但一定要初始化随机数生成器函数,以避免一次又一次地获得相同的序列。

是的,但我建议也投RAND_MAX双倍:

double r = ((double)rand() / (double)(RAND_MAX));

尽管有时没有必要,但编译器可能会根据目标和源变量类型自动将运算符强制转换为另一种类型。例如:

3.5/2 可能等于 1 而不是 1.75,因为除数是一个整数,为了避免这种情况,您必须执行以下操作:

3.5/2.0 或 3.5/(双倍)2

如果你正在寻找一个随机的双倍,这就是我实现它的方式。

如果您正在函数中寻找它,我可以编辑这篇文章。

rand() 包含在 stdlib.h 中

    #include <stdlib.h>
    #include <time.h>
    #include <iostream>
    using namespace std;
    int main()
    { 
        double num;
        double max;
        srand(time(NULL));
        cout << "Enter a number.";
        cin >> max;
        num = (((double)rand()*(max) / RAND_MAX) - max) *(-1);
        cout << num;

    }