Поліноми Чебишева, як згадується в іншій відповіді, - це многочлени, де найбільша різниця між функцією та поліномом є якомога меншою. Це відмінний старт.
У деяких випадках максимальна помилка - це не те, що вас цікавить, а максимальна відносна помилка. Наприклад, для синусоїдичної помилки помилка біля x = 0 повинна бути значно меншою, ніж для більших значень; ви хочете невелику відносну помилку. Отже, ви обчислили б поліном Чебишева на sin x / x і помножили цей многочлен на x.
Далі ви повинні розібратися, як оцінити поліном. Ви хочете оцінити його таким чином, щоб проміжні значення були малі, а отже, помилки округлення невеликі. Інакше помилки округлення можуть стати набагато більшими, ніж помилки в многочлени. І з такими функціями, як синусова функція, якщо ви недбалі, можливо, результат, який ви обчислюєте для sin x, більший, ніж результат для sin y, навіть коли x <y. Тому потрібен ретельний вибір порядку розрахунку та обчислення верхніх меж для помилки округлення.
Наприклад, sin x = x - x ^ 3/6 + x ^ 5/120 - x ^ 7/5040 ... Якщо розрахувати наївно sin x = x * (1 - x ^ 2/6 + x ^ 4 / 120 - х ^ 6/5040 ...), то ця функція в дужках зменшується, і це буде відбуватися , що якщо у наступного більшого числа х, то іноді грішать у буде менше , ніж гріх х. Натомість обчисліть 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 і 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 разів від останнього біта.