我想生成随机双号x
,其中:0 <= x <= 1
:
double x = ((double) rand() / (RAND_MAX));
这是从[0,1]获取随机双数的正确方法吗?
答案 0 :(得分:5)
是的,因为std::rand()
同时返回0
和RAND_MAX
。但是,如果您可以使用C ++ 11,则可以使用std::uniform_real_distribution
代替。
另外,不要忘记初始化随机数生成器,否则每次执行都会得到相同的序列。如果您使用std::rand
,std::srand( std::time(0) )
几乎总是足够的。
答案 1 :(得分:3)
是
虽然有些括号是多余的。
这取决于您的应用程序是否可以信任您的系统rand(3)功能。对于严肃的蒙特卡罗模拟,您需要一个来自数值库的记录良好的随机数生成器。
答案 2 :(得分:2)
是的,我相信随后生成的随机序列会给你0和1。但一定要初始化随机数生成器函数,以避免一次又一次地获得相同的序列。
答案 3 :(得分:1)
是的,但我建议将RAND_MAX也加倍:
double r = ((double)rand() / (double)(RAND_MAX));
虽然有时不必要,但编译器可能会根据目标和源变量类型自动将运算符转换为其他类型。例如:
3.5 / 2可能等于1而不是1.75,因为除数是一个整数,为了避免这种情况,你必须这样做:
3.5 / 2.0或3.5 /(double)2
答案 4 :(得分: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;
}