我在我的 iOS 应用程序的函数中调用 arc4random 以生成从 -5 到 6 的随机值。
double num;
for (int i = 0; i < 3; i++) {
num = (arc4random() % 11) - 5;
NSLog(@"%0.0f", num);
}
我从控制台得到以下输出。
2012-05-01 20:25:41.120 Project32[8331:fb03] 0
2012-05-01 20:25:41.121 Project32[8331:fb03] 1
2012-05-01 20:25:41.122 Project32[8331:fb03] 4294967295
0 和 1 是范围内的值,但是哇哦,4294967295 是从哪里来的?
将 arc4random()
更改为 rand()
可以解决问题,但是 rand()
当然需要播种。
最佳答案
arc4random()
返回一个 u_int32_t
-- 这是一个无符号整数,不代表负值。每次 arc4random() % 11
得出一个 0 ≤ n < 5 的数字时,您减去 5 并环绕到一个非常大的数字。
double
当然可以表示负数,但是您要等到为时已晚才能转换为double
。在那里打一个石膏:
num = (double)(arc4random() % 11) - 5;
在减法之前将取模的结果提升,一切都会好起来的。
关于objective-c - 为什么 arc4random 会返回奇怪的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10406216/