浮動小数点誤差、浮動小数点近似などについて、たくさんのことを読みました。
問題は、現実世界の問題に対する答えを読んだことがないということです。そして今日、私は現実世界の問題に出くわしました。そして、これは本当に悪いです、そして私は本当に逃げる方法を知りません.
この例を見てください:
[TestMethod]
public void TestMethod1()
{
float t1 = 8460.32F;
float t2 = 5990;
var x = t1 - t2;
var y = F(x);
Assert.AreEqual(x, y);
}
float F(float x)
{
if (x <= 2470.32F) { return x; }
else { return -x; }
}
x
であるはず2470.32
です。しかし実際には、丸め誤差により、その値は2470.32031
.
ほとんどの場合、これは問題ではありません。関数は連続しており、すべて良好ですが、結果は少し値がずれています。
しかし、ここには不連続関数があり、誤差は非常に大きくなっています。テストは不連続点で正確に失敗しました。
不連続関数で丸め誤差を処理するにはどうすればよいですか?