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

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)

不知道如何解决这个问题..需要一些指导......

4pi*_*ie0 8

需要一些指导......

指导1:

正确的比较,你应该使用

double probability = (rand()/(double)(RAND_MAX + 1));
                                               ^
                                        for better scaling
Run Code Online (Sandbox Code Playgroud)

因为目前在线,if(probability <= (1/10))你因为转换1/10 1/32/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)