Полиномы Чебышева, как упоминалось в другом ответе, являются полиномами, где наибольшая разница между функцией и полиномом настолько мала, насколько это возможно.Это отличное начало.
В некоторых случаях максимальная ошибка - это не то, что вас интересует, а максимальная относительная ошибка.Например, для функции синуса ошибка около x = 0 должна быть намного меньше, чем для больших значений;Вы хотите небольшую относительную ошибку.Таким образом, вы бы вычислили многочлен Чебышева для sin x / x и умножили этот многочлен на x.
Далее вы должны выяснить, как оценивать полином.Вы хотите оценить его таким образом, чтобы промежуточные значения были небольшими и, следовательно, ошибки округления были небольшими.В противном случае ошибки округления могут стать намного больше, чем ошибки в полиноме.А с такими функциями, как функция синуса, если вы небрежны, то может оказаться, что результат, который вы рассчитываете для sin x, больше, чем результат для sin y, даже если x
Например, sin x = x - x ^ 3/6 + x ^ 5/120 - x ^ 7/5040 ... Если вычислить наивно, sin x = x * (1 - x ^ 2 /6 + x ^ 4/120 - x ^ 6/5040 ...), то эта функция в скобках уменьшается, и будет , что если y будет следующим большим числом после x, то иногда греху будет меньше греха х.Вместо этого вычислите sin x = x - x ^ 3 * (1/6 - x ^ 2/120 + x ^ 4/5040 ...), где это не может произойти.
При вычислении полиномов Чебышева, например, обычно необходимо округлять коэффициенты для удвоения точности.Но хотя полином Чебышева является оптимальным, полином Чебышева с коэффициентами, округленными до двойной точности, не является оптимальным полиномом с коэффициентами двойной точности!
Например, для sin (x), где вам нужны коэффициенты для x, x ^ 3, x ^ 5, x ^ 7 и т. Д., Вы делаете следующее: Рассчитываете наилучшее приближение sin x с помощью полинома (ax + bx ^ 3 + cx ^ 5 + dx ^ 7) с точностью выше двойной, затем округляем до двойной точности, получая A. Разница между a и A будет довольно большой.Теперь вычислите наилучшее приближение (sin x - Ax) с полиномом (bx ^ 3 + cx ^ 5 + dx ^ 7).Вы получаете разные коэффициенты, потому что они адаптируются к разности между a и A. Округлите b до двойной точности B. Затем аппроксимируйте (sin x - Ax - Bx ^ 3) полиномом cx ^ 5 + dx ^ 7 и так далее.Вы получите многочлен, который почти так же хорош, как и исходный полином Чебышева, но намного лучше, чем Чебышев, округленный до двойной точности.
Далее следует учесть ошибки округления при выборе полинома.Вы нашли полином с минимальной ошибкой в полиноме, игнорирующем ошибку округления, но вы хотите оптимизировать полином плюс ошибка округления.Получив полином Чебышева, вы можете вычислить оценки для ошибки округления.Скажем, f (x) - ваша функция, P (x) - полином, а E (x) - ошибка округления.Вы не хотите оптимизировать |f (x) - P (x) |, вы хотите оптимизировать |f (x) - P (x) +/- E (x) |.Вы получите немного другой полином, который попытается сохранить полиномиальные ошибки там, где ошибка округления велика, и немного ослабит полиномиальные ошибки там, где ошибка округления мала.
Все это позволит вам легко округлять ошибки не более чем в 0,55 раз больше последнего бита, где +, -, *, / имеют ошибки округления не более чем в 0,50 раз больше последнего разряда.