【发布时间】:2015-02-22 09:16:43
【问题描述】:
我的任务:
生成 1 到 20 之间的随机数,精确到小数点后 1 位。
但是我的问题就像 mt_rand 一样简单。我希望生成的大多数数字都低于 0.5 - 4.5 左右,偶尔的数字在 4.5-10 之间,很少说每 12-20 小时一次在 10-20 之间。
我一直在使用以下内容,但不知道从哪里开始。我是一个非常基础的自学程序员。
$min = 1;
$max = 20;
$suisse_interest = mt_rand ($min*10, $max*10) / 10
也许如果我简要解释一下我为什么要这样做可能会有所帮助..
我拥有一个在线游戏,想添加 3 个“银行”,每个银行每小时产生不同的利息。大多数时候我希望它很低,但有时会更高,而且很少非常高 (15-20%)。
使用上面的代码,随机数会变得太频繁。
非常感谢任何帮助!
【问题讨论】:
-
由于您要创建的分布是monotone decreasing,您可以使用ziggurat algorithm 将您的分布(统一)映射到您想要的分布(可以任意创建)。或者您可以使用 box muller 转换,但它的效率较低(而且由于您经常这样做,您可能需要预先计算 ziggurat 算法中描述的表格)。