RND
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgRnd
- 最后更新: 2022-04-14
返回范围 [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 相同。
参见
RandomizeTimerInt
返回 目录