質問

私は私が共有したい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ビットシステムでは、CGFloatdoubleにTypedef'Dですが、fmaxf関数は一般的に動作します。。そうしないでください。

32ビットシステムでは、floatdoubleからCGFloatに似ているため、これは起こりません。丸めは発生しません。

代わりに、floatを含み、fmaxfサフィックスなしで<tgmath.h>を使用するか、fmaxの代わりにfを使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top