我在这个答案中找到了How to generate a random integer number from within a range的代码,这是一个完美工作的代码,但它是整数。有人知道如何更改此代码,使其统一返回一个介于0和1之间的数字吗?
#include <stdlib.h> // For random(), RAND_MAX
// Assumes 0 <= max <= RAND_MAX
// Returns in the closed interval [0, max]
long random_at_most(long max) {
unsigned long
// max <= RAND_MAX < ULONG_MAX, so this is okay.
num_bins = (unsigned long) max + 1,
num_rand = (unsigned long) RAND_MAX + 1,
bin_size = num_rand / num_bins,
defect = num_rand % num_bins;
long x;
do {
x = random();
}
// This is carefully written not to overflow
while (num_rand - defect <= (unsigned long)x);
// Truncated division is intentional
return x/bin_size;
}发布于 2017-05-23 15:04:26
你真的不需要那么复杂的代码。假设您在main函数中正确地初始化伪随机数生成器,例如,对于rand,如下所示
srand(time(NULL));下面的代码应该足够了:
double random(){
return (double)rand()/RAND_MAX;
}这里的想法是在0和RAND_MAX之间随机选择一个数字,然后除以RAND_MAX。由于RAND_MAX/RAND_MAX等于1,您将返回一个介于0和1之间的随机值。
发布于 2017-05-23 15:01:16
C方法:
#include <stdlib.h>
int main(int argc, char** argv)
{
printf("Random value: %f\n", (float(rand()) / float(RAND_MAX));
return 0;
}C++11方式:
#include <random>
int main(int argc, char** argv)
{
std::default_random_engine generator;
std::uniform_real_distribution<float> distribution(0.0, 1.0);
printf("Random value: %f\n", distribution(generator));
return 0;
}https://stackoverflow.com/questions/44127655
复制相似问题