static void Main(string[] args)
{
double x1 = 1.72;
double x2 =1.62;
double y = 0.01;
x1 + =y;
x2+=y;
Console.WriteLine(x1<=1.73);// True
Console.WriteLine(x2<=1.63);//False
}
Арифметические трабблы
Код:
Оказывается, что x2 = 1.6300000000000001, x1 = 1.73.Как сделать так, чтобы все-таки правильно считало во втором случае, и в чем вообще причина такого странного поведения?
p.s.Черчу графики, посему критична точность,так как точка с координатой 1.63 не прорисовывается
Код:
if (a == b)
выражениями вида
Код:
if (Math.Abs(a-b) <= 0.0001) // какая-то погрешность
Соответственно:
Код:
Console.WriteLine((x2 < 1.63) || (Math.Abs(x2-1.63) <= 0.0001));
Большое спасибо.Может имеется какая-то ссылка с примерами, где можно подробнее об этом (о флуктуации) почитать ?
Та самая
Кстати, в .NET определена константа, определяющая машинную погрешность. Double.epsilon, если память не изменяет.