浮点计算有一个巧妙的错误结果

时间:2014-03-28 19:17:29

标签: c# xna floating-point floating-point-precision

我正在写一个2D平台游戏,它有一个带有矩形撞击盒的物体。我正在使用XNA,它使用单精度浮点数作为其Vector2数据类型。由于浮点算法略有不准确,精灵的碰撞分辨率使其略高于给定图块的顶部,而不是将精灵直接放在图块上。

sprite.Position.Y == 240.0694f;
collisionDepth.Y == -0.06945801f;
sprite.Position.Y + collisionDepth.Y == 239.999985f;
correctPosition == 240f;
correctionPosition - (sprite.Position.Y + collisionDepth.Y) == 0.000015f;

不正确的放置导致精灵稍微抖动,但奇怪的是只在Y = 240f和Y = 248f之间。

我的问题是:如何确定给定的浮点值是否非常接近整数值?如何对其进行适当的舍入?

1 个答案:

答案 0 :(得分:1)

尝试Math.Abs方法来衡量贴近度:

float dVal = ...;
int iVal = ...;
if (Math.Abs(dVal - iVal) < 0.0001)
{
    // values are very close to each other
}