我很难找到一种在PostScript中在给定间隔内生成随机数的方法.
基本上PostScript有三个功能可以帮助您生成(伪)随机数.那些是rand
,srand
和rrand
.
后两个用于将种子传递给数字生成器以便能够再现特定结果.至少这是我所理解的.无论如何,他们似乎不适合我的情况.
所以rand
似乎是我可以用来生成随机数的唯一函数,但......
rand返回0到2 31 - 1 范围内的随机整数(来自PostScript语言参考,第637页(PDF中的651))
这远远超出了我正在寻找的时间间隔.我更感兴趣的是数千,可能是10.000或类似的值和小浮点值,最多100,所有下限为0.
我以为我可以通过简单的划分缩小我的数字并提取根,但这往往会在很多情况下给我不可用的小值.我想知道是否有强大的方法可以将大量数据缩减到我需要的数量,或者我更喜欢这样,只在所需的时间间隔内生成数字.
此外:在PostScript中不能使用while循环,否则我会编写一个函数来生成数字,直到它们适合我的间隔.
关于如何在我的间隔中查找数字的任何提示?
mod
通常很好而且速度很快.但是,通过使用浮点运算,您可以获得更均匀的分布.
rand 16#7fffffff div 100 mul cvi
这是因为mod
丢弃了输入的高位.并且PRNG通常试图随机化所有比特.通过向下缩小然后向上缩小,它们都会在舍入效果方面做出贡献.