Random


产生一个伪随机数。

Random, OutputVar [, Min, Max]
Random, , NewSeed

参数

OutputVar 存储结果的变量名。被存储的浮点数的格式由 SetFormat 决定。
Min 可以产生的最小的数。可以是负数,浮点数,或者一个 expression (表达式)。缺省情况下,产生的最小的数是 0 。 允许的最小整数是 -2147483648,浮点数没有限制。
Max 可以产生的最大的数。可以是负数,浮点数,或者一个 expression (表达式)。如果省略,缺省情况下,产生的最大的数是 2147483647 (这也是允许的最大整数 -- 但是浮点数没有限制)。
NewSeed

此模式通过 NewSeed (可以是一个 expression (表达式)) 对随机数产生器重新定义种子。这对随后产生的随机数都有影响。NewSeed 应当是介于 0 和 4294967295 (0xFFFFFFFF)之间的整数。重新定义种子能够提高所产生随机数的质量和安全性,尤其当 NewSeed 是一个真正的随机数而不是像伪随机数一样质量欠佳时更是这样。通常,种子只需要重新定义一次即可。

如果脚本中从来没有重定义过种子,种子使用一个 64 位值的低 32 位作为开始。这个 64 位的值是从1601年1月1日开始100纳秒的数目。这个低 32 位值从 0 变化至 4294967295,其中100毫秒累计 ~7.2 分钟。

注意

此命令产生一个伪随机数,即一个模拟真正随机数的数字,但是它实际上是一个基于复杂方程式的使得决定或者猜测下一个数字极为困难的数字。

如果 Min 或者 Max 其中之一被设置为十进制浮点数,最后的结果将是由 SetFormat 决定格式的浮点数。否则,结果将是一个整数。

结果是浮点数的局限:1) 只有其中 32位用于产生变量;2) 它偶尔也会比指定的 Max 略微大一点点(这是由浮点数内在的不精确性导致的)。

相关命令

SetFormat

示例

Random, rand, 1, 10
Random, rand, 0.0, 1.0

关于原始资料的注释

此函数使用了 Mersenne Twister 随机数产生器,MT19937, 原作者:Takuji Nishimura , Matsumoto, Shawn Cokus, Matthe Bellew, Isaku Wada.

Mersenne Twister 是一个用于产生随意数的算法。它在考虑其他随机数产生器的基础上被设计出来。它的循环周期,219937-1,和它的等分布顺序,623 dimensions(维度),都非常之大。与此同时,这个产生器非常快,它避免了乘法和除法,并且从缓存和管道中得益。想了解更多,请访问原作者的网站 www.math.keio.ac.jp/~matumoto/emt.html

(译者注:以下是关于算法的法律声明与使用限制,一般不允许翻译,但是这个没说,以下就不翻译了,不影响大家对此命令的使用^_^)

Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  3. The names of its contributors may not be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Do NOT use for CRYPTOGRAPHY without securely hashing several returned values together, otherwise the generator state can be learned after reading 624 consecutive values.

When you use this, send an email to: matumoto@math.keio.ac.jp with an appropriate reference to your work. It would be nice to CC: rjwagner@writeme.com and Cokus@math.washington.edu when you write.

This above has been already been done for AutoHotkey, but if you use the Random command in a publicly distributed application, consider sending an e-mail to the above people to thank them.