私がこれをするとき:
NSLog(@"%i",1.5 - 1.00 == 0.5);
私は1を取得しますが、これを行うと:
NSLog(@"%i",1.33 - 1.00 == 0.33);
私は0を取得します。
これを回避する方法はありますか?
私がこれをするとき:
NSLog(@"%i",1.5 - 1.00 == 0.5);
私は1を取得しますが、これを行うと:
NSLog(@"%i",1.33 - 1.00 == 0.33);
私は0を取得します。
これを回避する方法はありますか?
問題は、浮動小数点計算の精度にあります。一般に、演算子を使用して浮動小数点数と倍精度数を比較して等式にすることは避け==
、差が小さなイプシロン(例1E-9
)よりも小さいかどうかを確認することをお勧めします。
#include <math.h>
...
NSLog(@"%i", abs(((1.33 - 1.00) - 0.33) < 1E-9);
最初の例は、数値が2の累乗で構成されているため、機能します。、、1 = 2^0
および0.5 = 2^-1
。2番目の例の数値は、2の累乗として正確に分解できないため、等価性チェックは機能しません。