我正在开发一个程序,根据用户输入的种子,开始和结束范围为用户生成伪随机数。我基于Lehmer's random number generator algorithm编写了自己的基于模数的生成器。是的我知道基于模数的随机计算是有偏见的,但是对于它的使用这种方法是绰绰有余的。
无论如何,虽然我可以在VBA中从给定的种子生成一串随机数,但我找不到任何在线的公式或代码,显示该数字如何缩小以适应所提供的上限和下限。我希望有人在这里知道一个公式,或者知道我错过了一个涵盖这种过程的网站(我甚至不知道它会被称为缩放?)
感谢您的时间!如果它有用或任何人感兴趣,这是我的VBA代码生成基于种子的数字:
random = ((CDec(1664525) * t1) * seed + 1013904223) 't1 is the incremental count for each requested number
random = random - (Int(random / 2 ^ 23) * 2 ^ 21)
感谢您的帮助!
编辑:只是要指出,'缩放'不能使用我之前看过的rand函数,因为每次使用种子时最终的数字必须相同!
答案 0 :(得分:1)
@Kevin是对的,我只需要添加:
范围变化的线性插值
x
<x0,x1>
y
<y0,y1>
y=y0+((x-x0)*(y1-y0)/(x1-x0));
如果您的x范围未知,该怎么办?
x&65535
会将x范围更改为&lt; 0,65535&gt; 如果动态x范围小于动态y范围怎么办?
|x1-x0|<|y1-y0|
x=(rand()&255)|((rand()&255)<<8)