Floating point sucks.
Dec. 12th, 2013 06:06 pmНу все знают, что у Single 6-7 значащих (в смысле "сохраняющихся после перевода из десятичной формы и обратно"), а у Double 15-17, да?
Так вот, да здравствует очень_быстрое_накопление_погрешности.
15000*8.2 = 122999.99999999999, например.
EDIT: это в Double, если кто не понял. Откройте консоль Javascript в браузере и проверьте сами.
EDIT: хорошо, раз у нас тут pedant party, поясняю. Первое число изменяется с шагом в 1000. Второе - фиксировано. До 10000 включительно всё в порядке. Максимум - 20000. Итого, делаем под результат textbox шириной в 6 символов. И уже на 11000 получаем округление вниз и погрешность не в 1Е-17, а на 17 порядков больше.
Так вот, да здравствует очень_быстрое_накопление_погрешности.
15000*8.2 = 122999.99999999999, например.
EDIT: это в Double, если кто не понял. Откройте консоль Javascript в браузере и проверьте сами.
EDIT: хорошо, раз у нас тут pedant party, поясняю. Первое число изменяется с шагом в 1000. Второе - фиксировано. До 10000 включительно всё в порядке. Максимум - 20000. Итого, делаем под результат textbox шириной в 6 символов. И уже на 11000 получаем округление вниз и погрешность не в 1Е-17, а на 17 порядков больше.