3

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

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

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

4

5 回答 5

6

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

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

于 2013-11-02T12:19:51.330 回答
3

是的。

有些括号是多余的。

您是否可以信任系统的 rand(3) 函数取决于您的应用程序。对于严肃的蒙特卡罗模拟,您将需要一个来自数值库的有据可查的随机数生成器。

于 2013-11-02T12:21:28.713 回答
2

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

于 2013-11-02T12:28:45.210 回答
1

是的,但我建议也将 RAND_MAX 转换为双倍:

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

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

3.5 / 2 可能等于 1 而不是 1.75,因为除数是整数,为避免这种情况,您必须这样做:

3.5 / 2.0 或 3.5 / (双)2

于 2013-11-02T12:24:02.833 回答
1

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

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

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;


    }
于 2016-02-28T19:16:55.057 回答