# Random

生成伪随机数.

    Random, OutputVar , Min, Max
    Random, , NewSeed

## 参数

OutputVar

  用来存储结果的变量名. 存储的浮点数的格式由 SetFormat 决定, 如果它的慢速模式被使用; 否则 SetFormat 只在数字被转换为字符串时影响格式化.

Min
  可以生成的最小数字, 可以为负数, 浮点数或表达式. 如果省略, 最小的数字默认为 0. 允许的最小整数值为 -2147483648, 但浮点数没有限制.
Max

  可以生成的最大数字, 可以为负数, 浮点数或表达式. 如果省略, 最大的数字默认为 2147483647(这也是允许的最大整数值, 但浮点数没有限制).

NewSeed

  此模式使用 NewSeed 重新设定随机数生成器的种子(可以为表达式). 这会影响所有后续生成的随机数. NewSeed 应该为介于 0 和 4294967295(0xFFFFFFFF) 之间的整数. 重新设定种子可以提高随机数的质量/安全性, 尤其当 NewSeed 是真正的随机数而不是质量不佳的伪随机数时. 重新设定种子通常只需要进行一次.

  如果脚本从未重新设定种子, 则种子使用自 1601 年 1 月 1 日以来 100 纳秒间隔数目的 64 位值的低 32 位来开始. 这个值每 ~7.2 分钟内从 0 变化到 4294967295.

## 备注

此命令生成伪随机数, 即一个模拟真正随机数的数字, 但它实际上是通过复杂的公式计算使得判断/猜测下一个极为困难的数字.

在指定范围中所有数字被生成的机率几乎是相同的(然而, 请参阅下面的 "已知限制").

如果 Min 或 Max 其中一个为小数, 则最后结果将为由 SetFormat 设置格式的浮点数. 否则, 结果为整数.

结果为浮点数的已知限制: 1) 对于任何特定的范围, 只能生成大约 4,294,967,296 个不同的数字, 所以该范围内的所有其他数字将永远不会生成; 2) 偶尔结果可能略大于指定的 Max(这种情况是由浮点数固有的不精确性导致的).

## 相关

Format(), SetFormat

## 示例

生成一个范围为 1 到 10 的随机整数, 并将其存储在 rand.

    Random, rand, 1, 10

生成一个范围为 0.0 到 1.0 的随机浮点数, 并将其存储在 rand.

    Random, rand, 0.0, 1.0

## 基于原始来源的注释

该函数使用了 Mersenne Twister(马特赛特旋转演算法) 随机数发生器, MT19937, 由 Takuji Nishimura 和 Makoto Matsumoto, Shawn Cokus, Matthe Bellew 和 Isaku Wada 编写.

马特赛特旋转演算法 是一种生成伪随机数的算法. 它是考虑到其他各种发生器的缺陷而设计的. 周期 219937-1, 623 维均匀分布, 足够大, 速度快; 该算法避免了乘除法, 它有益于缓存和管道. 更多信息访问开发者网页 www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/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: m-mat@math.sci.hiroshima-u.ac.jp with an appropriate reference to your work.

上面提到的 AutoHotkey 已经做了, 但是如果你在公开发行的程序中使用了 Random 命令, 可以发送邮件去感谢上面的人.

dftg