【问题标题】:Creating function which generates random number between two arguments C [duplicate]创建在两个参数C之间生成随机数的函数[重复]
【发布时间】:2016-02-07 20:59:22
【问题描述】:

如何在 C 中创建函数,它会在设置的参数之间生成随机数 }(双精度类型)?在很多语言中,它只是

function randomnumber(min, max) {
  return Math.random() * (max - min + 1) + min;
}

但我没有找到任何好的 c 中类型 double 的解决方案。

【问题讨论】:

  • ...您使用的是floor,所以您真的想要一个随机的整数
  • 确实,我刚刚注意到,谢谢指出
  • function...? :) 返回类型?论据类型?
  • @ameyCU 建议与float 重复交易,但发布请求double。额外的精度/范围带来了一个好的答案会提供的额外问题。
  • trolkura 你想要什么类型的分布:maxmin 之间的线性分布?不包括[min...max) 而不是[min... max] 之类的限制之一更容易。您希望能够在minmax 之间生成每个double,还是只生成其中的大部分就足够了?

标签: c


【解决方案1】:

有几种方法。上面的答案 1 适用于最小值,最大值为双倍。对于rand(),要记住的重要一点是它返回一个介于0RAND_MAX 之间的随机整数。 RAND_MAX 至少是 2^15,但在大多数系统上是 2^31。如果 min 和 max 是整数并且它们的差小于RAND_MAX 那么一个非常简单的方法是:

delta = max - min;
r  = rand() % delta + min;

【讨论】:

    【解决方案2】:
    #include <stdlib.h> /* rand(), srand(), RAND_MAX */
    
    double randd(double min, double max) {
        int r = rand();
        double delta = max - min; /* assume max > min */
        double tmp = r / (RAND_MAX + 1.0); /* generate up to but excluding max */
        return tmp * delta + min;
    }
    

    【讨论】:

    • 查看运行:ideone.com/EOGwIJ
    • OP 对目标不是很具体,但这个答案可能不会在minmax 之间生成每个double
    • @chux 取决于minmax 这个答案,有其偏见,可以在这些值之间生成每个double .... 并重复一些答案来引导(想想52尾数为 63 位,PRNG 为 63 位)。
    • 稀有机器的 int 超过 63 位 - rand() 的返回类型 - 更有可能是 32 位(甚至 16 位),因此不足以生成 @ 的所有范围987654331@ 与许多minmax。如果这个答案引用了 63 位 PRNG 或表达了如何弥补 RAND_MAX 范围不足的问题,我不会这么评论。
    猜你喜欢
    • 1970-01-01
    • 2014-12-19
    • 2013-10-14
    • 2014-03-20
    • 2014-04-17
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    • 2021-08-02
    相关资源
    最近更新 更多