Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Повышений точности


Автор: sos 20.10.2005, 23:03
я ТУТ РЕШАЮ слау, Пацаны пара вопросов^
1.Что значит 1.#INF; -1.#IND(ВЫДАЕТ В КОНСОЛИ);
2.тип double самый точный???КАК повысить тосность???(алгоритм опимизирован!!!)

Автор: sergejzr 20.10.2005, 23:18
1) Это значит, негативная бесконечность.
2) Точность повысить можно с пом. специальных библиотек, но они очень медленные, так как простейшие действия как сложение, умножение делаются "ручками" в коде (типа как мы делаем это столбиком), а не процессором. А doubl самый точный тип с которым процессор напрямую может работать.

Но сперва необходимо выяснить, какая именно точность тебе нужна ;)

Автор: cardinal 20.10.2005, 23:44
Цитата(sergej @ 20.10.2005, 21:18)
1) Это значит, негативная бесконечность.

И позитивная соответсвенно (как я понимаю)...

Автор: maxim1000 21.10.2005, 00:09
когда решается какая-то задача на компьютере, погрешность появляется из-за двух причин:
1. недостаточность точности при сохранении конечного результата
2. погрешности при вычислениях

для того, чтобы решить первую проблему выход единственный - менять тип результата, наверняка, придется менять тип и промежуточных переменных
это медленно...

зато для второго варианта есть один подход...
погрешности при вычислениях с double обычно имеют относительный характер, т.е. при уменьшении числа абсолютная погрешность его тоже уменьшается
для СЛАУ делают так:
1. решают ее обычным методом, т.е. находят x: Ax=b
2. получают на самом деле |Ax-b| маленькая, но не нулевая
3. решают задачу: Ay=e (e=Ax-b)
в качестве более точного решения берут вместо x x-y
получается A(x-y)=Ax-y=b+e-e=b
на самом деле, Ay не точно равно e, поэтому точность последнего равенства тоже не абсолютная, но преимущества все равно есть: во втором процессе вычислений участвуют меньшие числа, а потому абсолютная погрешность получается меньше...
конечно, ничто не спасает от погрешности при сохранении результата, но тут, как я уже писал, кроме замены типа на более точный врядли что-то придумается...
хотя опять же, даже если и заменять, то можно провести такую пару вычислений и "собрать" только в конце более точные значения из пары менее точных... тогда можно будет сделать не такой сильный скачок в длительности работы алгоритма, правда, за счет точности...

Автор: Mayk 21.10.2005, 09:26
long double точнее double

Автор: pablo 21.10.2005, 14:24
Цитата
ong double точнее double

На некоторых компиляторах точности могут совпадать

Автор: Mayk 21.10.2005, 18:24
Весьма на некоторых надо полагать.
В борле и гнусе различаются точно. В вязанке афаир тоже. Другие не щупал.

зы.
float <= double <= long double и йожик с ними это конечно хорошо, но всё же точнее лонг дабла типа не найти afaik.

Автор: S.A.P. 21.10.2005, 21:33
ИМХО тут порядок вычислений может влиять на точность.

a*b/c

с точки зрения математики, пофигу в каком порядке считать. А если, скажем, число C - бесконечно малое, то делить на него лучше меньшее из A и B, чтобы погрешность сократить.

Автор: cardinal 21.10.2005, 22:12
Цитата(Perchilla @ 21.10.2005, 19:33)
ИМХО тут порядок вычислений может влиять на точность.

"ИМХО" можешь убрать, т.к. это факт. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)