Техника

Проблемы реализации точных вычислений в IBM PC.

MS
Marina Shlenskay
140
Да, есть такая проблема.
Все задачи по характеру своих решений делятся на устойчивые и неустойчивые.
Неустойчивые задачи (с "эффектом бабочки") не решаются численными методами на компьютере, в связи с тем, что любой компьютер работает только с конечным числом знаков после запятой. Это разного рода нелинейные задачи, типа, предсказание погоды, турбулентная динамика, шарик в рулетке, биржевые котировки, задача трёх тел и т. п. Работать с бесконечным числом знаков после запятой компьютеры не могут принципиально, да и иррациональные числа неизвестны с абсолютной точностью.
В устойчивых задачах, где ошибка вычислений нарастает не быстрее экспоненты, точность вычислений можно увеличивать за счет увеличения числа знаков после запятой и увеличения числа итераций. Таким способом можно не только увеличить точность решения, но и заглушить "цифровой шум" ("цифровую температуру").
OM
Olga Myrachko
79 693
Лучший ответ
никаких проблем. Плавающая арифметика соответствует стандарту IEEE, так что - никаких сюрпризов. Кстати, суперкомпьютеры в это грешат.

желаете большую точность - пишите библиотеку или используйте многочисленные готовые.
Ну, все проблемы упираются в две вещи - производительность и конечность представления вещественных чисел, обусловленную тем, что IBM PC - это цифровой компьютер, хранящий все данные в виде конечных последовательностей единиц и нулей.
Первая решается более мощным железом, распараллеливанием и более хитрыми алгоритмами. Вторая - использованием либо методов вычислений с оценкой погрешности (например, интервальная арифметика) , либо специальные подмножества чисел (например, рациональные дроби) , либо более "вместительные" ячейки памяти для представления вещественных чисел. Иногда, погрешность можно существенно уменьшить, если изменить алгоритм так, чтобы не возникало операций с числами, сильно отличающихся порядком.

Вообще же проблем как правило особых нет. В большинстве задач хватает т. н. одинарной точности ( в языке С тип float, занимающего 4 байта ), для более менее сложных - двойной точности (double 8 байт) или, для пущей важности 10 байт. Кстати, однажды довелось проводить эксперимент на одной из задач, который показал, что расчет на 8 и 10 байтах дает один и тот же результат. ну, это так, частный случай. .
Ну, а когда этого не хватает, тогда уже начинают извращаться. ))
Сложность вычислений и квантовые компьютеры
http://elementy.*ru/video?pubid=431220
(без *) онлайн лекция
Дина Иванькина
Дина Иванькина
35 427