Vythe ([personal profile] vythe) wrote2015-01-09 10:18 am

Никому нельзя верить

Как говорят на юге - 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". Но я их всё равно ненавижу.

Только не спрашивайте, зачем это такое вообще появилось в коде. Это индусское программирование, его простым людям не понять. Простым людям достаточно научиться это вовремя чинить...
doldonius: (Default)

[personal profile] doldonius 2015-01-09 07:15 pm (UTC)(link)
Вообще, конечно, о проблему пересчета двоичных дробей в десятичные и наоборот не один мозг был сломан. Может, тут и динго зарыта?
doldonius: (Default)

[personal profile] doldonius 2015-01-10 06:59 am (UTC)(link)
То есть не осилили. Один индусокод встретил другой.