尴尬的arc4random结果

时间:2012-01-02 20:19:06

标签: objective-c random arc4random

我正在使用此代码,其中'length'值为'50'。

newX = (arc4random()%(lenght+1)) - (lenght/2);
newY = (arc4random()%(lenght+1)) - (lenght/2);
NSLog(@"Creature Move X:%f, Y:%f", newX, newY);

但在调试器中,我得到的结论是:

2012-01-02 21:10:50.794 Kipos[28833:207] Creature Move X:4294967296.000000, Y:4294967296.000000
2012-01-02 21:10:50.896 Kipos[28833:207] Creature Move X:4294967296.000000, Y:12.000000

发生了什么事?

newXnewY是花车:

float newX;
float newY;

1 个答案:

答案 0 :(得分:5)

arc4random返回 unsigned int(并且可能length也是无符号的)。将您的代码更改为例如

newX = (float)((int)(arc4random() % (length + 1))) - (length / 2));

为了避免在减去时溢出。

请注意,我还为结果添加了显式浮点转换,这不是绝对必要的,但它使代码更加不言自明。