封闭间隔中的均匀随机数生成器

Altroware

我需要一个封闭时间间隔的c或c ++的无偏统一随机数生成器(双精度)(为double),例如[0,1]。

许多随机数生成器(例如GSL gsl_rng_uniform(r))仅在开放时间间隔内工作,例如[0,1),但这不适用于我的情况。

弗洛里斯

除非您具有整数值,否则封闭间隔的概念存在问题-因为达到间隔“尽头”的可能性极小。如果您有一个具有最大值的整数随机数生成器RAND_MAX,则可以通过计算得到一个封闭间隔

rand() / double(RAND_MAX)

因为它将精确地从0到1(包括1)

如果这样做不能为您提供足够的分辨率,则可以考虑“连接”多个随机数。假设双精度数的尾数实际上为53位(加上一个尾数始终为“ 1”),则可以执行此操作(此代码假定RAND_MAX = 0xFFFFFFFF以提高可读性;您可以对其进行改进...):

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

double goodRand() {
  unsigned long long r;
  unsigned long long int r1, r2;
  r1 = rand();
  r2 = rand();
  r = (r1 << 22) + (r2 & 0x003FFFFF);
  return (double) r/ (double)(0x001FFFFFFFFFFFFF);
}

int main(void) {
  int i;
  double rMax = 0;
  for (i =0; i < 10000; i++) {
    double temp;
    temp = goodRand();
    rMax = (temp>rMax)?temp:rMax;
  }
  printf("max value is %lf\n", rMax);
}

现在,您已经对随机数进行了非常精细的采样,最大值为1.0(含)。您可以使代码更紧凑,但这是总体思路...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

快速均匀分布随机数生成器

来自分类Dev

fortran中的随机数生成器

来自分类Dev

Haskell中的伪随机数生成器

来自分类Dev

在Clojure中重新绑定随机数生成器

来自分类Dev

R中的并行随机数生成器

来自分类Dev

Memento在伪随机数生成器中的用法

来自分类Dev

Sprite Kit中的种子随机数生成器

来自分类Dev

C / C ++中随机数生成器的实现

来自分类Dev

C(++)中的Stata随机数生成器

来自分类Dev

numpy中的随机数生成器

来自分类Dev

数组中的C ++随机数生成器

来自分类Dev

在HTML中创建随机数生成器

来自分类Dev

Discord.py中的随机数生成器

来自分类Dev

在Sprite Kit中播种随机数生成器

来自分类Dev

C / C ++中随机数生成器的实现

来自分类Dev

fortran中的随机数生成器

来自分类Dev

用Java中的随机数生成器循环

来自分类Dev

matlab中的随机数生成器问题

来自分类Dev

设计随机数生成器

来自分类Dev

C ++随机数生成器

来自分类Dev

随机数生成器android

来自分类Dev

JavaScript随机数生成器

来自分类Dev

最快的随机数生成器

来自分类Dev

随机数生成器-停止

来自分类Dev

C程序中的随机数生成器未生成正确的随机数

来自分类Dev

用随机数生成器播种随机数生成器池

来自分类Dev

在julia随机数生成器中设置随机种子

来自分类Dev

在C中添加由随机数生成器生成的数字

来自分类Dev

播种多个随机数生成器