我正在编写一些代码,其中有类似以下内容的部分:
double a = SomeCalculation1();
double b = SomeCalculation2();
if (a < b)
DoSomething2();
else if (a > b)
DoSomething3();
然后在其他地方,我可能需要进行相等性比较:
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,因此我需要处理小数和大数。
我将此标记为语言无关,因为我想知道我可以在任何语言中实现这个功能。