Tha*_*nks 5 iphone cocoa-touch objective-c uikit
我给它0和400,它有时返回400以上的值.这没有意义.
- (float)randomValueBetween:(float)low andValue:(float)high {
return (((float) arc4random() / RAND_MAX) * (high - low)) + low;
}
Run Code Online (Sandbox Code Playgroud)
这实际上是我在网上发现的一个片段.也许有人可以看到那里的错误?
在手动页面arc4random表示返回的值可以在有效范围内的任何地方u int32(即0 to (2**32)-1).这意味着你想要除以0xFFFFFFFF,而不是RAND_MAX我想象的更少(但它依赖于库,所以你必须确切地检查它是什么).
因此你的功能应该变成:
- (float)randomValueBetween:(float)low andValue:(float)high {
return (((float) arc4random() / 0xFFFFFFFFu) * (high - low)) + low;
}
Run Code Online (Sandbox Code Playgroud)
arc4random 返回从0到(2 ^ 32 - 1)的伪随机值RAND_MAX 默认值为(2 ^ 31 - 1)因此,对于范围内的随机值,函数可能将(high - low)范围乘以系数.20 - 800
| 归档时间: |
|
| 查看次数: |
1446 次 |
| 最近记录: |