【问题标题】:How to generate random number within x-y range, if x and y values varies [language C] [duplicate]如果 x 和 y 值不同,如何在 x-y 范围内生成随机数 [语言 C] [重复]
【发布时间】:2015-02-02 21:07:31
【问题描述】:

如何在 C 中生成 x-y 范围内的随机数

X : [t , t+m] and Y : [r , r+m ].

也就是说,如果 x 从 t 变化到 t+n,y 从 r 变化到 r+n。

【问题讨论】:

  • @Mike 不同意这篇文章是一个很好的副本,因为它是关于整数的,这是 FP - 细微的差异,即使总体数学是相同的。不过,其他地方可能存在欺骗。
  • 这不是一个重复的问题。它看起来很相似,但又有所不同。不要只看标题,请在添加错误链接之前仔细阅读问题

标签: c random


【解决方案1】:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
   double x = 1.0;
   double y = 2.0;
   srand(time(NULL));

   // Guarenateed keep x1 between x and y.
   double x1 = x + rand()*(y-x)/RAND_MAX;

   printf("x1: %lf\n", x1);

   return 0;
}

【讨论】:

    【解决方案2】:

    基本上,您使用操作系统滴答计数为生成器播种,将生成的数字与上限取模,然后将下限添加到结果中。

    【讨论】:

    • 这是不正确的。对于范围 x...y,它将生成介于 xx+y 之间的数字。
    • @RomanAmbinder 不,你将随机数与(upper - lower + 1) 取模,然后加上lower
    • @Weather Vane (upper - lower + 1) 中建议的 +1 并不完全适用于此 OP 的需求,因为此代码适用于 FP 范围。无论如何,对 OP 的范围 0.0 到 0.33333 取模是有问题的。
    • @chux 没错,但我评论的是这个答案而不是问题。
    猜你喜欢
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    相关资源
    最近更新 更多