В настоящее время я пишу код, в котором есть что-то вроде:
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, поэтому мне нужно работать как с маленькими, так и с большими числами.
Я пометил это как языково-независимый, потому что я ' Мне интересно, как я могу это сделать, независимо от того, какой язык я использую.