我已经使用Int.random()方法和arc4random_uniform()进行了数字生成速度测试。
两项测试均在macOS控制台中运行,并将构建配置设置为release。以下是我用于测试的代码。
public func randomGen1() {
let n = 1_000_000
let startTime = CFAbsoluteTimeGetCurrent()
for i in 0..<n {
_ = arc4random_uniform(10)
}
let timeElapsed = CFAbsoluteTimeGetCurrent() - startTime
print(timeElapsed)
}
public func randomGen2() {
let n = 1_000_000
let startTime = CFAbsoluteTimeGetCurrent()
for i in 0..<n {
_ = Int.random(in: 0..<10)
}
let timeElapsed = CFAbsoluteTimeGetCurrent() - startTime
print(timeElapsed)
}
Run Code Online (Sandbox Code Playgroud)
我得到的时间是
0.029475092887878418(用于arc4random_uniform(10))
0.20298802852630615(用于Int.random(in:0 .. <10))
为什么Int.random()这么慢?
有没有优化的方法?
有没有更快的方法快速生成随机数?