iOS 64ビットプロセッサのFMINFとFMAXFのバグ
質問
私は私が共有したい64bitプロセッサとのバグに遭遇しました。
CGFloat test1 = 0.58;
CGFloat test2 = 0.40;
CGFloat value;
value = fmaxf( test1, test2 );
.
結果は次のようになります。
値= 0.5799999833106995
これは明らかに四捨五入の問題ですが、どちらの値を選んだかを確認する必要がある場合は、誤った結果が得られます。
if( test1 == value ){
// do something
}
.
しかし、あなたがどちらのmin(a、b)またはmax(a、b)を使うならば、それは期待どおりに機能します。
これが共有の価値があると思った
ありがとう
解決
これは、fminf
またはfmaxf
のバグとは関係ありません。あなたのコードにバグがあります。
64ビットシステムでは、CGFloat
はdouble
にTypedef'Dですが、fmaxf
関数は一般的に動作します。。そうしないでください。
32ビットシステムでは、float
はdouble
からCGFloat
に似ているため、これは起こりません。丸めは発生しません。
代わりに、float
を含み、fmaxf
サフィックスなしで<tgmath.h>
を使用するか、fmax
の代わりにf
を使用します。
所属していません StackOverflow