簡體   English   中英

比較浮點舍入失敗System.Math.RoundTo C ++ XE7

[英]comparison float rounding fails System.Math.RoundTo C++ XE7

我一直在嘗試將浮點值四舍五入到4個精度,但沒有成功。

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

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

想要的結果是39.934500000000
實際結果是39.934543423412

我嘗試了許多方法,包括將浮點數舍入到給定的精度沒有成功。

我正在使用AMD FX83xx 64位。 程序使用XE7內置於32位調試中

謝謝

您希望的6個十進制數字的精度非常接近float數據類型的精度極限。 對於40f左右的數字,ε或連續可表示的浮點值之間的增量約為7.63E-6,因此“最佳”值與所得到的值之間只有幾位不同。 這可能是由於四舍五入接近極限,但我不確定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM