c - 如何生成0到1之间的随机 float

标签 c random

我在这个答案中找到了代码 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;
}

最佳答案

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

srand(time(NULL));

以下代码应该足够了:

double random(){

    return (double)rand()/RAND_MAX;
}

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

关于c - 如何生成0到1之间的随机 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44127655/

相关文章:

objective-c - 相对于动画将 CGPoints 从一个 View 转换为另一个 View

swift - 在 Swift 中创建随机 Bool

java - 如何从java中的arraylist中选择一个随机项?

mysql - 如何在 MySQL 中随机选择 HEX 颜色但避免特定颜色范围?

c - 使用ctime的段错误

c - 指向链表指针的指针

将 C 转换为具有分段问题的 NASM 程序集

c - Windows 上的/proc/net/dev 替代方案

algorithm - 如何在 C++ 中生成具有固定总和的随机值

C++生成随机数