LINUX.ORG.RU

История изменений

Исправление AntonI, (текущая версия) :

Объясни пожалуйста, это как «с конца»?

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

Есть два простых рецепта:

  1. суммировать от меньших по модулю чисел к большим, то есть от старших членов ряда к младшим.

  2. отдельно суммировать положительные члены и отдельно отрицательные что бы увернуться от маленькой разности двух больших чисел.

Но это не является серебряной пулей, там еще много тонкостей которых я не знаю поскольку сталкиваюсь с таким довольно редко. Из скромного личного опыта - один раз у нас в хитрой численной схеме с адаптивной точностью основанной на ряде Тейлора получалась фигня. Начали суммировать ряд с конца - все стало нормально.

PS еще можно члены ряда по два суммировать. В общем это надо гуглить, еще одна общая рекомендация ЕМНИП - то куда ты сумму складываешь должно иметь большую точность чем числа в которых считаются члены ряда.

Исходная версия AntonI, :

Объясни пожалуйста, это как «с конца»?

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

Есть два простых рецепта:

  1. суммировать от меньших по модулю чисел к большим, то есть от старших членов ряда к младшим.

  2. отдельно суммировать положительные члены и отдельно отрицательные что бы увернуться от маленькой разности двух больших чисел.

Но это не является серебряной пулей, там еще много тонкостей которых я не знаю поскольку сталкиваюсь с таким довольно редко. Из скромного личного опыта - один раз у нас в хитрой численной схеме с адаптивной точностью основанной на ряде Тейлора получалась фигня. Начали суммировать ряд с конца - все стало нормально.