0

重複の可能性:
浮動小数点数の修正

float randNum = arc4random()%(100)-1;

これにより、1〜100の乱数が得られることをどこかで読みました。またはそれに近い何か。

この行は常に機能しているように見えますが、この数値をテキストへの保存/印刷のために NSString に変換してから、順序付けやその他の計算のために float に戻します。しかし、そのフロートを元に戻すと、意味不明のように見えることがあります。変数ビューで次のようにします。

9   float   9.75303731e-41   

NSString に変換して float に戻すと、使用している float 値が台無しになるのはなぜですか? (例えば、私は何を台無しにしたのでしょうか? または、代わりに CGFloat を使用する必要がありますか?)

これがすべての関連コードだと思います:

NSMutableArray *stringArray = [[NSMutableArray alloc] init];
floatArray[30];
// put three random floats into an NSMutableArray of NSStrings
for(int i = 0; i < 3; i++)
{
    float randNum = arc4random()%(100)-1;
    NSString *randString = [NSString stringWithFormat:@"%.3f", randNum];
    [stringArray addObject:randString];
}

// convert NSStrings back to float
for(NSString *string in stringArray)
{
    float temp = [string floatValue];
    floatArray[iterator] = temp;
}

ヘルプ/アドバイスをお寄せいただきありがとうございます。

編集:コードをステップ実行すると、値がガベージされているように見える「float temp = [string floatValue]」行まで、float 値が正常に見えるように見えます。

4

1 に答える 1

1

arc4random() の結果が uint32_t の場合、なぜ float を使用しているのですか? 整数型に切り替えると、ほぼ確実にこれらすべてを回避できます。問題は、有効数字が 3 桁しかない文字列形式への変換が原因であると思われるためです。フォーマットとして %.15f を使用するとどうなりますか?

補足: arc4random_uniform() を使用してください。より単純で、その範囲内で一様にランダムに分布することが保証されています。

于 2012-11-20T18:00:38.060 に答える