2016-04-22 4 views
0

私は浮動小数点数を4精度に丸めようとしてきましたが、成功しませんでした。比較フロート丸め失敗System.Math.RoundTo C++ XE7

float fconv = 1.0f; 
float fdata = 39.934543423412f; 
float fres = RoundTo(fdata*fconv, -4); 

if(fres <= 39.9345f){do something;} //<-- unwanted behavior 

募集結果は39.934500000000
実際の結果は、私は成功せずRound a float to a given precisionを含む多くの方法を試してみた39.934543423412

です。

私はAMD FX83xx 64ビットで作業しています。プログラムはXE7

を使用して32ビットのデバッグに内蔵されている6桁のおかげ

答えて

0

ご所望の精度は非常にfloatデータ型用の高精度限界に近いです。連続する表現可能な浮動小数点値の間のεすなわちデルタは、約40fの数で約7.63E-6なので、「最良の」値とあなたが得ているものとの間にはわずか2ビットだけ異なる。これはおそらく限界に近い丸めのためですが、わかりません。

関連する問題