Здорово пацаны. В процессе вычислительной обработки определенной математической модели возникает так называемая вычилслительная погрешность. (используется тип double). Так вот вопрос, можно ли как то указать компилятору количество бит для мантиссы и експоненты числа. Или другой вопрос как минимизировать погрешность посредством изменения порядка вычислений? P. S. данный вопрос не является тривиальной, просьба новичкам оставить свое мнение при себе...
BeastInXmel wrote: > > Или > другой вопрос как минимизировать погрешность посредством изменения > порядка вычислений?
Насколько я помню. При сложении, вычитании чисел погрешность результата
представляет собой максимум погрешностей операндов. При умножении,
делении сумму погрешностей.
Еще надо учитывать специфику конкретного компилятора, процессора.
Еще учитывать конкретный алгоритм, устойчивость его.
Ну а дальше, основываясь на вышесказанном уже строить порядок вычислений
с целью минимизации погрешности. Общий совет тут дать трудно.
Да и еще к этому добавляется сложность чтения полученного кода и т.д.
Может оказаться, что затраты на подобную оптимизацию "не стоят выделки".
Posted via RSDN NNTP Server 2.0
Re: Минимизация вычислительной погрешности
От:
Аноним
Дата:
10.04.07 11:18
Оценка:
Здравствуйте, BeastInXmel, Вы писали:
P. S. данный вопрос не является тривиальной, просьба новичкам оставить свое мнение при себе...
Ну в общем да. Этот вопрос совсем не тривиальный.
Более того, он не зависит от языка.
Тебе может лучше учебники Самарского почитать.
В общем лучше расскажи о задаче.
То, что просишь, скорей всего не сильно тебе поможет.
Здравствуйте, BeastInXmel, Вы писали:
BIX> Или другой вопрос как минимизировать погрешность посредством изменения порядка вычислений?
BIX> P. S. данный вопрос не является тривиальной, просьба новичкам оставить свое мнение при себе...
Неслабый апломб... Но с такой постановкой вопроса ответы новичков и экспертов будут мало различаться Так что попробуй сам соответствовать.
Минимизировать погрешность — не просто можно, но и нужно.
Но это зависит от задачи.
Простой пример. Суммирование. Чтобы минимизировать ошибки денормализации, используется алгоритм Хаффмана.
Средний пример. Численное интегрирование (например, движение в переменном поле). Тут тебе и выбор метода интегрирования, и выбор частоты дискретизации.
Сложный пример. Моделирование сил взаимодействия большого числа объектов (объемный заряд, гравитация звездного скопления). Ещё и выбор подходящей модели — например, пространственное дерево.
Здравствуйте, BeastInXmel, Вы писали:
BIX>P. S. данный вопрос не является тривиальной, просьба новичкам оставить свое мнение при себе...
Хоть я не разбираюсь в данной проблеме, но всё-таки выскажу своё менение новичка
1. Для кардинальной минимизации погрешности при вычислениях, надо использовать алгоритмы, которые заточены под минимизацию погрешности
2. Если алгоритм, который оптимизирует погрешность вычисления не найден, то можно использовать различные классы для работы с числами очень высокой точности и обычные алгоритмы
3. Если не устраивает скорость работы пункта 2, то можно использовать отложенные вычисления (если конечно это подходит для решения твоей задачи). Отложенные вычисления — это когда объект (как правило — список) хранит все действия, которые с этим объектом производились, а затем за один проход вычисляет результат (при этом порядок выполнения операций оптимизируется для уменьшения погрешности).
Hello, BeastInXmel!
You wrote on Tue, 10 Apr 2007 06:31:59 GMT:
B> Здорово пацаны. В процессе вычислительной обработки определенной B> математической модели возникает так называемая вычилслительная B> погрешность. (используется тип double). Так вот вопрос, можно ли как то B> указать компилятору количество бит для мантиссы и експоненты числа. Или B> другой вопрос как минимизировать погрешность посредством изменения B> порядка вычислений? P. S. данный вопрос не является тривиальной, просьба B> новичкам оставить свое мнение при себе...
Насколько помню, один из способов — сортировать операдны арифметических
операций и группировать их на "большие" и "маленькие". Т.е. например
стараться складывать "маленькие" с "маленькими", а "большие" с "большими".
With best regards, Slava Antonov. E-mail: deadbeef@so.yandex.ru