Никому нельзя верить
Как говорят на юге - lest we forget. Или, как говорят на севере, я просто оставлю это здесь.
Win7x64, .Net 4ю0, C# , MSVS-2010.
double x = 2478.6;
double y = 503.88;
double z = 1974.72;
x - y = 1974.7199999999998
"" + (x - y) = "1974.72"
x - y - z = -0.00000000000022737367544323206
"" + (x - y - z) = "-2.27373675443232E-13"
Double.Parse("" + (x - y - z)) = -0.000000000000227373675443232
Double.Parse("" + (x - y - z), System.Globalization.NumberStyles.Number) -> Exception.
Документация про это грустно говорит "double does not guarantee precision". Но я их всё равно ненавижу.
Только не спрашивайте, зачем это такое вообще появилось в коде. Это индусское программирование, его простым людям не понять. Простым людям достаточно научиться это вовремя чинить...
Win7x64, .Net 4ю0, C# , MSVS-2010.
double x = 2478.6;
double y = 503.88;
double z = 1974.72;
x - y = 1974.7199999999998
"" + (x - y) = "1974.72"
x - y - z = -0.00000000000022737367544323206
"" + (x - y - z) = "-2.27373675443232E-13"
Double.Parse("" + (x - y - z)) = -0.000000000000227373675443232
Double.Parse("" + (x - y - z), System.Globalization.NumberStyles.Number) -> Exception.
Документация про это грустно говорит "double does not guarantee precision". Но я их всё равно ненавижу.
Только не спрашивайте, зачем это такое вообще появилось в коде. Это индусское программирование, его простым людям не понять. Простым людям достаточно научиться это вовремя чинить...
no subject
no subject
Это же .Net-машина, она впросте ничего не делает, и высоколобые аргументы про биты и байты там никого не оправдывают. И, собственно, в большинстве ситуаций машина эту погрешность вычислений распознаёт и прячет. Но вот нашёлся случай, когда её взглюкнуло...
no subject