gpt4 book ai didi

c++ - 连续创建一个0到1之间的随机数

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:11:03 36 4
gpt4 key购买 nike

我正在尝试用 C++ 为股票价格变动建模。我需要创建一个介于 0 到 1 之间的随机数。

但似乎随机数生成器的值一直在增加,并不是真正随机的。

代码如下所示:

#include<iostream>
#include<ctime>
#include<cstdlib>
#include<time.h>

using namespace std;

int main()
{
double stockPrice = 25;
int start = 0, end = 0;
start = clock();

srand (time(NULL));
cout << (double) rand() / (double) (RAND_MAX) << endl;
system("pause");

while(stockPrice > 18)
{
if(stockPrice == 20)
{
double probability = (rand()/(double)RAND_MAX);
if(probability <= (1/10))
{
stockPrice = stockPrice-1;
}
else
{
stockPrice = stockPrice +1;
}
}
else if (stockPrice < 20)
{
double probability = (rand()/(double)RAND_MAX);
if(probability <= (1/3))
{
stockPrice = stockPrice -1;
}
else
{
stockPrice = stockPrice +1;
}
}
else
{
double probability = (rand()/(double)RAND_MAX);
if(probability <= (2/3))
{
stockPrice = stockPrice -1;
}
else
{
stockPrice = stockPrice +1;
}
}
cout << stockPrice << endl;
}

end = clock();

double t = (double)(start-end)/CLOCKS_PER_SEC;
cout << t << endl;
system("pause");
}

不确定如何解决这个问题。需要一些指导...

最佳答案

Need some guidance...

指导 1:

正确的比较,你应该使用

double probability = (rand()/(double)(RAND_MAX + 1));
^
for better scaling

因为当前在 if(probability <= (1/10)) 行由于转换 1/10,您正在与 0 进行比较1/32/3到整数

指导 2:

毕竟你可以使用更好的生成器 statistical properties

#include <random>
#include <iostream>

std::random_device rd;
std::mt19937 gen(rd());
std::uniform_real_distribution<> dis(0, 1);
double uniformOn01 = dis(gen);

关于c++ - 连续创建一个0到1之间的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19091527/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com