3

私はこのコードを使用しています。ここで、「長さ」の値は「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;
4

1 に答える 1

5

arc4randomunsigned intを返します(おそらくlengthunsignedでもあります)。コードをegに変更します

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

減算するときのオーバーフローを避けるために。

結果に明示的なfloatキャストも追加したことに注意してください。これは厳密には必要ではありませんが、コードがもう少しわかりやすくなります。

于 2012-01-02T20:39:30.683 に答える