如何在 IBM Swift 沙箱中播种 rand()?

How to seed rand() in IBM Swift Sandbox?

我是 Whosebug 的新手,所以如果有更好的方法 post 一个现有问题的特定案例,请纠正我。

阿尔贝托·巴雷拉回答了 How does one seed the random number generator in Swift?

let time = UInt32(NSDate().timeIntervalSinceReferenceDate)
srand(time)
print("Random number: \(rand()%10)")

总体上是完美的,但是当我在 The IBM Swift Sandbox 中尝试时,它每隔 运行 给出相同的数字序列,至少在 space 半小时内。

import Foundation
import CoreFoundation

let time = UInt32(NSDate().timeIntervalSinceReferenceDate)
srand(time)
print("Random number: \(rand()%10)")

目前,每个 运行 打印 5。

有没有人找到在 IBM Sandbox 中执行此操作的方法?我发现 random() 和 srandom() 产生不同的数字序列,但每个 运行 都相同。我没有在 Foundation、CoreFoundation、Darwin 或 Glibc 中找到 arc4random()。

顺便说一句,我谦虚地建议声誉超过 1500 的人创建一个标签 IBM-Swift-Sandbox.

srand 正在按预期工作。如果您每次在 let time = UInt32(NSDate().timeIntervalSinceReferenceDate) 中更改值而不是 NSDate().timeIntervalSinceReferenceDate 中的任何数字,它将输出随机数。

也许这是一个缓存问题,它只是没有看到代码中的任何更改,也没有发送它进行重新编译:)

我不知道发生了什么,但今天一切正常。所以我想问题已经得到解答:

srand(UInt32(NSDate().timeIntervalSinceReferenceDate))

工作正常。

(我认为一定有什么改变了。在大约 10 天的时间里,它在两台不同的计算机上表现相同(通过重复尝试生成相同的数字)......很奇怪。)

这是我们在沙盒中实现 server-side 缓存的方式的问题; non-deterministic 代码会不断地 return 相同的答案,即使它不应该有。我们现在已将其禁用,每个 运行 您应该会得到不同的结果。我们目前正在研究更好的机制以确保沙盒的可扩展性。

我也会看看那个标签!