double 値を「5.5」などの値と比較するのに問題があります。私のコードでは、次のものがあります。
if (j==5.5f) {
//do something
}
コードを実行し、nslog を使用して j の値と 5.5fi の値を出力すると、まったく同じ値が得られます。ただし、コードは if ステートメントに入りません。ここで何が問題なのですか?
double 値を「5.5」などの値と比較するのに問題があります。私のコードでは、次のものがあります。
if (j==5.5f) {
//do something
}
コードを実行し、nslog を使用して j の値と 5.5fi の値を出力すると、まったく同じ値が得られます。ただし、コードは if ステートメントに入りません。ここで何が問題なのですか?
浮動小数点数の実装は、通常の整数として実装されていないため、比較しようとしたときに精度に関する非常に一般的な問題を引き起こします。等しいように見える 2 つの浮動小数点数の差は非常に小さい可能性があるため、前述のように、2 つの浮動小数点数を比較するときに使用する必要がある、ある種のしきい値またはイプシロン値を定義する必要があります。
float や double を '==' 式と決して比較せず、プラットフォーム、コンパイラ、言語などに関係なく、既に示したしきい値または組み込み関数を常に使用することは、非常に優れたコード プラクティスです。(文字列比較も同様)