我给它 0 和 400,它有时会返回 400 以上的值。这没有意义。
- (float)randomValueBetween:(float)low andValue:(float)high {
return (((float) arc4random() / RAND_MAX) * (high - low)) + low;
}
这实际上是我在网上找到的一个片段。也许有人可以看到其中的错误?
最佳答案
manual page for arc4random
指示返回值可以是 u int32
有效范围内的任何位置(即 0 到 (2**32)-1
)。这意味着您需要除以 0xFFFFFFFF
,而不是 RAND_MAX
,我认为它会更少(但是它依赖于库,因此您必须准确检查这是什么)。
你的函数应该变成:
- (float)randomValueBetween:(float)low andValue:(float)high {
return (((float) arc4random() / 0xFFFFFFFFu) * (high - low)) + low;
}
关于iphone - 这个随机函数有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1131101/