在PostScript中生成间隔中的随机数

时间:2015-12-27 20:13:37

标签: random postscript

我很难找到一种在PostScript中在给定间隔内生成随机数的方法。

基本上PostScript有三个功能可以帮助您生成(伪)随机数。这些是randsrandrrand

后两个用于将种子传递给数字生成器以便能够再现特定结果。至少这是我所理解的。无论如何,他们似乎不适合我的情况。

所以rand似乎是我可以用来生成随机数的唯一函数,但是......

rand 返回0到2之间的随机整数 31 - 1
(来自the PostScript Language Reference,页面637(PDF中为651))

这远远超出了我正在寻找的时间间隔。我更感兴趣的是价值高达数千,可能是10.000或类似的值和小浮点值,最多100,所有的下限都是0。

我认为我可以通过简单的划分缩小我的数字并提取根,但这往往会在很多情况下给我不可用的小值。我想知道是否有强大的方法可以将大量数据缩减到我需要的数量,或者我更喜欢这样,只会在所需的时间间隔内生成数字。

此外:在PostScript中无法使用while循环,否则我会编写一个函数来生成数字,直到它们适合我的间隔。

关于在我的间隔中查找数字的任何提示?

2 个答案:

答案 0 :(得分:5)

mod通常足够好而且速度很快。但是,通过使用浮点运算,您可以获得更均匀的分布。

rand 16#7fffffff div 100 mul cvi

这是因为mod丢弃了输入的高位。并且PRNG通常试图随机化所有比特。通过向下缩小然后向上缩小,它们都会在舍入效果方面做出贡献。

答案 1 :(得分:4)

只需使用模运算符将其缩小到您想要的大小:

GS>rand 100 mod stack
7