5

rand() 或 qrand() 函数生成一个随机整数。

int a= rand();

我想得到一个介于 0 和 1 之间的随机数。我该怎么做?

4

5 回答 5

8

您可以将一个随机数生int成为 a float,然后将其除以RAND_MAX,如下所示:

float a = rand(); // you can use qrand here
a /= RAND_MAX;

结果将在从零到一的范围内,包括端点。

于 2013-04-11T10:51:59.510 回答
6

使用 C++11,您可以执行以下操作:

包括随机标题:

#include<random>

定义 PRNG 和分布:

std::default_random_engine generator; 
std::uniform_real_distribution<double> distribution(0.0,1.0);

获取随机数

double number = distribution(generator); 

此页面此页面中,您可以找到一些关于uniform_real_distribution.

于 2013-04-11T10:56:13.530 回答
3

检查这篇文章,它展示了如何将 qrand 用于您的目的,这是一个围绕 rand() 的线程安全包装器。

#include <QGlobal.h>
#include <QTime>

int QMyClass::randInt(int low, int high)
{
   // Random number between low and high
   return qrand() % ((high + 1) - low) + low;
}
于 2013-04-11T10:54:45.387 回答
2
#include <iostream>
#include <ctime>
using namespace std;

//
// Generate a random number between 0 and 1
// return a uniform number in [0,1].
inline double unifRand()
{
    return rand() / double(RAND_MAX);
}

// Reset the random number generator with the system clock.
inline void seed()
{
    srand(time(0));
}


int main()
{
    seed();
    for (int i = 0; i < 20; ++i)
    {
        cout << unifRand() << endl;
    }
    return 0;
}
于 2013-04-11T10:52:21.933 回答
1

从定义精度的随机数中获取一个模块。然后进行类型转换以浮动并除以模块。

float randNum(){
   int random = rand() % 1000;
   float result = ((float) random) / 1000;
   return result;
}
于 2013-04-11T11:43:09.337 回答