iphone - 这个随机函数有什么问题?

标签 iphone objective-c cocoa-touch uikit

我给它 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/

相关文章:

iphone - 在 hittest 中的点上应用 CGAffineTransformRotate

iphone - 跨平台手机开发环境

objective-c - UIViewController - 神秘地加载缓慢

iphone - 在其他 View Controller 下面创建一个 View Controller

iphone - NSMutableArray 和 NSPredicate 过滤

iOS加载动态图层蒙版(即图层蒙版在代码外提供)

iphone - 如何用十六进制数字初始化 uipicker

iphone - 将应用程序升级到 iPhone 4 : how to get touches to give low-res screen values

ios - 导航栏与 QLPreviewController 中的状态栏重叠

iphone - 核心数据 : "Dangling reference to an invalid object." error