で非常に奇妙な問題が発生していatoi(char *)
ます。char
aを数値表現 (数値であることはわかっています) に変換しようとしていますが、98.04% の確率で完全に正常に動作しますが、残りの 1.96% の確率でランダムな値が得られます。
テストに使用しているコードは次のとおりです。
int increment = 0, repetitions = 10000000;
for(int i = 0; i < repetitions; i++)
{
char randomNumber = (char)rand()%10 + 48;
int firstAtoi = atoi(&randomNumber);
int secondAtoi = atoi(&randomNumber);
if(firstAtoi != secondAtoi)NSLog(@"First: %d - Second: %d", firstAtoi, secondAtoi);
if(firstAtoi > 9 || firstAtoi < 0)
{
increment++;
NSLog(@"First Atoi: %d", firstAtoi);
}
}
NSLog(@"Ratio Percentage: %.2f", 100.0f * (float)increment/(float)repetitions);
GNU99
XCode 4.6.1 で C 言語方言を使用しています。最初の if (最初の数値が 2 番目の数値と等しくない場合) はログに記録されないため、2 つの atoi は毎回同じ結果を返しますが、結果は毎回異なります。「正しくない結果」は、-1000 から 10000 までの範囲にあるようです。9999 を超えるものも、-999 を下回るものも見たことがありません。
私が間違っていることを教えてください。
編集:
キャラクターデザインを次のように変更しました。
char numberChar = (char)rand()%10 + 48;
char randomNumber[2];
randomNumber[0] = numberChar;
randomNumber[1] = 0;
しかし、私は使用しています:
MAX(MIN((int)(myCharacter - '0'), 9), 0)
整数値を取得します。
すべての回答に本当に感謝しています!