![]() |
как сравнивать?? если 9.45-9.44 != 0.01
Hi!
здесь есть пример Код:
q = 10.2 - 8.1;*** ЗЫ что странно - через такую функцию работает Код:
roundTo = function (theNumber, decPlaces) {Код:
transit = function (tt){ |
|
AlexMatveev, пасибо!
Замечательно, во всё виноваты Винды и проц, ГЫ! Тепеть для "точных" вычисленией класс дописывать? на основе: Цитата:
может при использовании первой функции Флэш выставляет биты регистра control word в нужное состояние? |
Все потому же....
если взять и сделать так ;) a = int((10.2-8.1)*10000000); trace (a) то получим, а = 20999999 а это значит что после вычисления (10.2-8.1) мы получаем не (2.1), а банально, но факт (2.0999999). А это соответственно не равно (2.1) Тут получается что все дробные вычисления надо делать через сдвиг разрядной сетки. - |
не понял, ты это к чему?
не, int - не туда округляет :) Туда окугляет Math.round(theNumber) Код:
c = Math.round((10.2-8.1)*10000);Код:
a = 10.2*10000;Цитата:
>>>, >>, <<= эти? |
не понял, ты это к чему?
не, int - не туда округляет :) Туда окугляет Math.round(theNumber) Код:
c = Math.round((10.2-8.1)*10000);Код:
a = 10.2*10000;Цитата:
>>>, >>, <<= эти? |
Цитата:
задача - сдвинуть разрядную сетку так, чтобы неточность вычислений _для нашей конкретной задачи_ не менялась при ошибках в числах с плавающей точкой. умножили всё на 10^N - получили сдвиг разрядной сетки на N разрядов (поскольку речь о десятичной системе). после округления ошибка никуда не денется (на то оно и округление), но просто будет пренебрежимо мала. кстати, вот тут, точно такая же тема рассматривалась. |
Если округления не нравятся можно через погрешность:
q = 10.2 - 8.1; eps=0.01; //погрешность trace(Math.abs(q-2.1)<eps); |
Один математик (к сожалению, не помню, кто) утверждал, что 0.9999... (0.(9)) в точности равняется единице. В смысле, не "приблизительно", а именно точно. И он смог это доказать! Доказательство было просто гениальным: "пойдем от обратного. Допустим не равны. Тогда пусть мне скажут, на сколько 1 превышает 0.999...". Ответ был очевиден. На 0. :D
В нашем случае все не совсем так, т.к. отличаются они в этом примере на 4.44089209850063e-16. Посему поддерживаю мысль о введении погрешности, но сделать ее порядка e-10 :) |
| Часовой пояс GMT +4, время: 17:10. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.