我目前正在编写一些代码,其中包含以下内容:
double a = SomeCalculation1();
double b = SomeCalculation2();
if (a < b)
DoSomething2();
else if (a > b)
DoSomething3();
And then in other places I may need to do equality:
double a = SomeCalculation3();
double b = SomeCalculation4();
if (a == 0.0)
DoSomethingUseful(1 / a);
if (b == 0.0)
return 0; // or something else here
简而言之,我有很多浮点数学要做,我需要做各种条件的比较。我不能把它转换成整数数学,因为这样的东西在这里是没有意义的。
我以前读到过浮点数比较是不可靠的,因为你可能会遇到这样的情况:
double a = 1.0 / 3.0;
double b = a + a + a;
if ((3 * a) != b)
Console.WriteLine("Oh no!");
简而言之,我想知道: 如何可靠地比较浮点数(小于、大于、等于) ?
我使用的数字范围大约是从10E-14到10E6,所以我确实需要处理小数字和大数字。
我将其标记为语言不可知论者,因为我感兴趣的是,无论我使用什么语言,我都可以实现这一点。