【问题标题】:comparison float rounding fails System.Math.RoundTo C++ XE7比较浮点舍入失败 System.Math.RoundTo C++ XE7
【发布时间】:2016-04-22 00:49:52
【问题描述】:

我一直在尝试将浮点值舍入到 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

我尝试了很多方法,包括Round a float to a given precision,但都没有成功。

我正在开发 AMD FX83xx 64 位。程序使用XE7在32bit Debug中构建

谢谢

【问题讨论】:

    标签: c++ precision c++builder-xe7


    【解决方案1】:

    您所需的 6 位十进制数字精度非常接近浮点数据类型的精度限制。对于 40f 左右的数字,epsilon 或连续可表示浮点值之间的增量约为 7.63E-6,因此“最佳”值与您得到的值之间只有几位不同。这可能是由于四舍五入接近极限,但我不确定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-02
      • 1970-01-01
      • 2011-06-09
      • 1970-01-01
      • 2015-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多