2011-06-19 10 views
5

奇妙な行動C:フロート比較の問題の客観

(Xcodeの4ブレークポイントのスクリーンショット) http://img3.picload.org/image/lawgcd/untitled.png

なぜこの比較収率は本当でしょうか?私は本当にそれを得ることはありません..

+2

浮動小数点演算を含む任意のより多くのプログラミングを行う前にゴールドバーグによって、この論文を読むhttp://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html –

+0

おかげでポール、 非常に便利! – DucatiNerd

+0

"Debug"ビルドでデバッガを実行していますか?デバッグシンボルを削除して最適化されたビルドで実行している場合、デバッガはソースコード内の行にブレークポイントを合わせるのに非常に苦労します。 –

答えて

6

コードが正常に動作しているようだ、
あなたは本当に比較が正しいと確信していますか?

クイック抜粋:

for(int i=0;i<10;i++){ 
    float value = (arc4random()%100)/(float)100.0f; 
    NSLog(@"%f",value); 
    if(value < 0.01f) { 
     NSLog(@"YES"); 
    } else { 
     NSLog(@"NO"); 
    } 
} 

出力:

0.520000 
NO 
0.520000 
NO 
0.100000 
NO 
0.000000 
YES 
0.390000 
NO 
0.690000 
NO 
0.770000 
NO 
0.930000 
NO 
0.320000 
NO 
0.230000 
NO 

EDIT - コメントへの応答:私の場合は

、ブレークポイントが正しく動作している:

enter image description here

+0

+1:よいアプローチ – Jhaliya

+0

これを調べる時間をとってくれてありがとう!奇妙なことは、テストが真実に見えるということです。少なくとも、リターン時にブレークポイントを設定すると、デバッガはそれをヒットします。 – DucatiNerd

+0

私のMacではすべて正常に動作しています。スクリーンショットをチェックアウトしてください。 – Anne