Skip to content

RND


返回范围 [0, 1) 内的随机双精度

语法

declare function Rnd ( byval seed as single = 1.0 ) as double

用法

result = Rnd( seed )

参数

seed

可选的 single 参数。如果 seed 值为零(0.0),则重复上次生成的随机数。对于任何其他数字,返回新的随机数。使用 QB 兼容算法时,负数会完全重新设置生成器种子。不传参数的默认行为是返回新的随机数。

返回值

返回生成的随机数。

说明

返回类型为 double、范围为 [0, 1)(即 0 <= Rnd < 1)的数字,基于随机种子(参见 Randomize)。

Rnd 可以使用多种不同的算法——有关默认算法和可选算法的详情,请参见 Randomize

每次运行程序时,Rnd 都会返回相同的数字序列。可以通过重新设置生成器种子来改变这个序列。

注意:

Rnd 是线程安全的(通过使用内部互斥锁),但不是线程特定的。在多线程程序的上下文中使用时,与单线程调用上下文相比,执行速度会显著降低。

标准头文件 "fbprng.bi" 中还提供了其他随机数生成器的未完成结构。

示例

start GeSHi

vb
'' Function to a random number in the range [first, last), or {first <= x < last}.
Function rnd_range (first As Double, last As Double) As Double
    Function = Rnd * (last - first) + first
End Function

'' seed the random number generator, so the sequence is not the same each time
Randomize

'' prints a random number in the range [0, 1), or {0 <= x < 1}.
Print Rnd

'' prints a random number in the range [0, 10), or  {0 <= x < 10}.
Print Rnd * 10

'' prints a random integral number in the range  [1, 10], or {1 <= n <= 10}.
''     (because: 0 <= Rnd * 10 < 10)
Print Int(Rnd * 10) + 1

'' prints a random integral number in the range [69, 420], or {69 <= n <= 420}.
''     (because: 69 <= rnd_range(69, 421) < 421)
Print Int(rnd_range(69, 421))

end GeSHi

版本

  • fbc 1.10.0 之前(fbc 1.08.0 和 fbc 1.09.0),"fbprng.bi" 被命名为 "fbmath.bi"。
  • fbc 1.08.0 之前:

方言差异

使用的默认算法取决于当前使用的方言:

  • 使用 -lang fb 方言时,使用 32 位粒度的 32 位 Mersenne Twister 函数。
  • 使用 -lang qb 方言时,使用产生与 QB 中 Rnd 相同输出的函数。粒度为 24 位。
  • 使用 -lang deprecated-lang fblite 方言时,使用系统中可用的 C 运行时函数。Win32 中的函数粒度为 15 位,Linux 和 DOS 中为 32 位。

与QB的区别

  • 如果在 -lang qb 方言中编译则无差异。其他方言也可以通过以适当参数调用 Randomize 来使用相同的种子和生成算法。
  • 对于非 QB 兼容算法,如果可选参数小于 0,其含义与传递参数 1 相同。

参见

  • Randomize
  • Timer
  • Int

返回 目录

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系