アプリケーションに奇妙なバグがあり、この単純なテスト ケースに絞り込むことができました。
protected void Page_Load(object sender, EventArgs e)
{
bool isHeightExceeded = IsHeightExceeded(10.16f, 127.15f);
lit.Text = isHeightExceeded.ToString();
}
private bool IsHeightExceeded(float y, float height)
{
float nextHeight = y + height;
return (137.31f - nextHeight) < 0;
}
これをデバッグ モードでビルドして実行すると、isHeightExceeded bool は (予想どおり) False になりますが、リリース モードでビルドして実行すると、True になります。
これを引き起こす舞台裏で何が起こっているのでしょうか? 浮動小数点の精度と関係があると推測していますが、正確にはわかりません。
どんな助けでも大歓迎です。