lak*_*esh 5 c++ random algorithm math
我试图用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");
}
Run Code Online (Sandbox Code Playgroud)
不知道如何解决这个问题..需要一些指导......
需要一些指导......
指导1:
正确的比较,你应该使用
double probability = (rand()/(double)(RAND_MAX + 1));
^
for better scaling
Run Code Online (Sandbox Code Playgroud)
因为目前在线,if(probability <= (1/10))你因为转换1/10 1/3和2/3整数而与0比较
指导2:
毕竟你可能会使用具有更好统计特性的生成器
#include <random>
#include <iostream>
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_real_distribution<> dis(0, 1);
double uniformOn01 = dis(gen);
Run Code Online (Sandbox Code Playgroud)