关于Swift中随机数生成的大多数讨论都讨论了arc4random()和其他产生随机数全局序列的标准C函数。在某些情况下,有一个隔离的伪随机数发生器是有用的,它可以提供单独的,可重现的数字流。例如在游戏中,您可能希望对游戏的两个方面具有可再现的随机序列,并且调用这两个方面的顺序不应该改变相应的流。
答案 0 :(得分:2)
OP提供的答案
rand_r()函数通过操作自己的种子值来维持状态来实现这一点。下面是一个简单的例子,说明如何使用它来模仿Java Random类。
/** Java style PRNG */
public class Random
{
var seed : UInt32 = 0
init( _ seed : UInt32 ) {
self.seed = seed
}
/** float 0-1.0 */
public func nextFloat() -> Float {
return Float(rand_r(&seed)) / Float(INT32_MAX);
}
}
答案 1 :(得分:0)
rand_r()函数通过操作自己的种子值来维持状态来实现这一点。下面是一个简单的例子,说明如何使用它来模仿Java Random类。
/** Java style PRNG */
public class Random
{
var seed : UInt32 = 0
init( _ seed : UInt32 ) {
self.seed = seed
}
/** float 0-1.0 */
public func nextFloat() -> Float {
return Float(rand_r(&seed)) / Float(INT32_MAX);
}
}