【问题标题】:How to generate random numbers between 0.1 and 0.01如何生成 0.1 到 0.01 之间的随机数
【发布时间】:2018-08-31 01:57:10
【问题描述】:

我知道使用

生成整数随机数是可能的

(rand() % (difference_between_upper_and_lower_limit)) + lower_limit

我想知道是否有办法生成 0.1 到 0.01 之间的数字。 我试过了 double speed = (rand() % 10)/100; 但它总是只给我 0.0000000; 提前致谢!`

【问题讨论】:

  • /100 是整数除法。 /100.0 是浮点除法。
  • 你看过drand48吗?它不会是完美的(即您必须对其结果执行的操作),但它可能足以满足您的需要。看看here 了解一些想法。
  • 在 0.1 和 0.01 之间有无数个数字。你的意思是要从这个集合中的十个数字(0.01、0.02、0.03、0.04、0.05、0.06、0.07、0.08、0.09、0.10)中生成一个随机数?如果不是什么意思?

标签: c random


【解决方案1】:

您可以使用以下方法在任意间隔上创建均匀分布

((double)rand()/RAND_MAX)*(i_end-i_start)+i_start

其中i_starti_end 表示间隔的开始和结束。

在你的情况下尝试

((double)rand()/RAND_MAX)*0.09+0.01

【讨论】:

  • 让我们称之为制服。适合基本程序。
  • @chux 是的,它最多给出RAND_MAX+1 不同的结果,这很可能在该时间间隔内少于两倍。可能有更好的函数可以使用,比如drand48(),但我想坚持使用他在问题中提到的随机函数。
【解决方案2】:

我想,你错过了类型转换部分 ==> ((double)(rand() % 10))/100;

试试这个代码。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) {
  // If you don't set the seed-value, you'll always get the same random numbers returned in every execution of the code
  srand(time(0));

  double speed = ((double)(rand() % 10))/100;
  printf("%f\n", speed );

  speed = ((double)(rand() % 10))/100;
  printf("%f\n", speed );

  speed = ((double)(rand() % 10))/100;
  printf("%f\n", speed );

  speed = ((double)(rand() % 10))/100;
  printf("%f\n", speed );

  return 0;
}

【讨论】:

  • 为什么在指定 [0.01...0.1](double 常量)并使用 OP 时使用 float double speed
  • 我的错误....我认为 OP 有“浮动”。更新了我的答案。感谢您指出:)
  • 请注意,这将生成值 [0 到 0.09] 而不是 [0.01 到 0.1]。 speed = (rand() % 10)/100.0; 会更容易阅读。
【解决方案3】:
double upper_limit = .1;
double lower_limit = .01;
double value = ((upper_limit-lower_limit)*rand())/RAND_MAX + lower_limit;

【讨论】:

    猜你喜欢
    • 2013-04-23
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 2014-04-11
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多