【问题标题】:how can I get smaller scale in RAND function [duplicate]如何在 RAND 函数中获得更小的比例[重复]
【发布时间】:2013-07-16 02:50:32
【问题描述】:

我使用此代码创建 0 到 1 之间的随机数。

randnumber = (double)((double)rand() / (double)RAND_MAX);

这行代码经常给我像 0.650434、0.302340 和 0.906789 这样的数字,这对我来说是个大数字。问题是我需要更小的范围数,比如这些数字:0.000200、0.000100、0.000400、0.000600 等等。 如何修改这行代码以获得我的结果?

【问题讨论】:

  • 你能不能只是从 1-100 随机数然后将每个数字除以 10000? (或者你需要的任何比例因子)?我认为不需要在随机函数中进行除法。
  • 你用的是C还是C++?
  • 除以十为范围 [0 0.1]
  • 你的施法过度了,只考虑randnumber = (double)rand()/RAND_MAX(由于运算符优先级相当于randnumber = ((double)rand())/RAND_MAX,这相当于你因variables promotion而得到的)。

标签: c++ c


【解决方案1】:

你知道你在寻找什么样的概率分布函数吗?如果您仍然想要统一,您可以简单地将 [0,1) 结果除以一个大数并应用移位,使其以您想要的值为中心。

如果你想要一些正态分布的东西,你可以使用像逆变换 method 这样的东西。同样,您需要将其居中并修改标准偏差。对其他分布也有类似的转换

【讨论】:

  • 你能告诉我更多关于逆变换采样和实现方式的信息
  • 为了帮助您,我需要知道您想要使用哪种发行版。如果你想达到正态分布,Box-Muller 变换很容易实现,而且速度不是很慢(en.wikipedia.org/wiki/Box-Muller_transform
  • 你知道我有这个概率函数:probability =((x -2) / 10000 ) 并且想通过 rand() 函数创建一个介于 0 和 1 之间的随机数。然后将随机数与可能性。如果随机数小于概率做一些事情。问题是随机数的分布不适应概率函数的分布。
  • x 是在 [0,1) 范围内产生值的随机变量吗?如果是这样,你的问题是什么?
  • 没有 x 是 2 到 10000 之间的数字
【解决方案2】:

这给出了 1 到 100 之间的随机数

int randInt= (rand()%100)+1;

所以划分它,以获得您想要的范围

double yourRange=(double)randInt/100000;

【讨论】:

  • 它给出了一个不均匀的结果分布,并且在某些实现中也恰好有很差的熵。
猜你喜欢
  • 2020-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多