Xorshift 伪随机数生成器库。
专门用于生成海量随机数。
Xorshift 是
有关 Xorshift 本身的更多细节,请参阅原始论文。
struct XorshiftGenerator: RandomNumberGenerator {
/// Create `XorshiftGenerator`.
/// - precondition: At least one of seeds must be non-zero.
public init(x: UInt32, y: UInt32, z: UInt32, w: UInt32)
/// Create `XorshiftGenerator` seeded with another `generator`.
public init<G: RandomNumberGenerator>(using generator: inout G)
/// Create `XorshiftGenerator` seeded with `SystemRandomNumberGenerator`.
public init()
}
XorshiftGenerator
符合标准库的 RandomNumberGenerator
协议。
您可以将 Random API 与 XorshiftGenerator
一起使用。
var gen = XorshiftGenerator()
Int.random(in: 0..<10, using: &gen)
UInt.random(in: 0..<10, using: &gen)
Float.random(in: 0..<10, using: &gen)
Double.random(in: 0..<10, using: &gen)
let array = [0, 1, 2, 3]
array.randomElement(using: &gen)
XorshiftGenerator
具有 fill
方法,该方法使用随机 UInt32
值填充给定的区域。
它比 arc4random_buf
更快。
func testPerformance_arc4random() {
let count = 1_000_000
var a = [UInt32](repeating: 0, count: count)
measure {
for _ in 0..<100 {
arc4random_buf(&a, MemoryLayout<UInt32>.size * a.count)
}
} // 0.136sec
}
func testPerformance_xorshift() {
let count = 1_000_000
var a = [UInt32](repeating: 0, count: count)
measure {
var gen = XorshiftGenerator()
for _ in 0..<100 {
gen.fill(start: &a, count: a.count)
}
} // 0.067sec
}
XorshiftGenerator
还提供多种方法,用于从均匀/正态分布中采样多个浮点随机数。
有关详细信息,请参阅 Uniform.swift 和 Normal.swift。