【问题标题】:How to generate random floating point numbers from 0 to 1 [duplicate]如何生成从0到1的随机浮点数[重复]
【发布时间】:2017-10-22 23:37:28
【问题描述】:

我在此答案How to generate a random integer number from within a range 中找到了一个代码,该代码可以完美运行,但 tis 适用于整数。有人知道如何更改此代码,使其统​​一返回 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;
}

【问题讨论】:

标签: c random


【解决方案1】:

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;
    }

【讨论】:

  • 问题是针对 C 而不是 C++。
  • 哦,抱歉,刚刚错过了标签。答案还包含 rand() 解决方案,因此也适用于 C :)
  • 问题是我想要很多,大约150000所以程序必须统一返回数字
【解决方案2】:

你真的不需要那些复杂的代码。想象一下,您在 main 函数中正确初始化了伪随机数生成器,例如 rand

srand(time(NULL));

下面的代码应该足够了:

double random(){

    return (double)rand()/RAND_MAX;
}

这里的想法只是在 0 和 RAND_MAX 之间选择一个随机数,然后将它除以 RAND_MAX。由于 RAND_MAX/RAND_MAX 等于 1,您将返回一个介于 0 和 1 之间的随机值。

【讨论】:

    猜你喜欢
    • 2011-07-07
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多