比较浮点舍入失败System.Math.RoundTo C ++ XE7

时间:2016-04-22 00:49:52

标签: c++ precision c++builder-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

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

我正在使用AMD FX83xx 64位。程序使用XE7

在32位调试中构建

由于

1 个答案:

答案 0 :(得分:0)

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

相关问题