Polinomial Chebyshev, sebagaimana disebutkan dalam jawaban lain, adalah polinomial di mana perbedaan terbesar antara fungsi dan polinomial sekecil mungkin. Itu awal yang bagus.
Dalam beberapa kasus, kesalahan maksimum bukanlah apa yang Anda minati, tetapi kesalahan relatif maksimum. Misalnya untuk fungsi sinus, kesalahan dekat x = 0 harus jauh lebih kecil daripada untuk nilai yang lebih besar; Anda ingin kesalahan relatif kecil . Jadi Anda akan menghitung polinomial Chebyshev untuk sin x / x, dan kalikan polinomial dengan x.
Selanjutnya Anda harus mencari cara untuk mengevaluasi polinomial. Anda ingin mengevaluasinya sedemikian rupa sehingga nilai-nilai perantara kecil dan oleh karena itu kesalahan pembulatan kecil. Kalau tidak, kesalahan pembulatan mungkin menjadi jauh lebih besar daripada kesalahan dalam polinomial. Dan dengan fungsi seperti fungsi sinus, jika Anda ceroboh maka mungkin saja hasil yang Anda hitung untuk dosa x lebih besar daripada hasil untuk dosa y bahkan ketika x <y. Jadi pilihan hati-hati dari urutan perhitungan dan perhitungan batas atas untuk kesalahan pembulatan diperlukan.
Misalnya, sin x = x - x ^ 3/6 + x ^ 5/120 - x ^ 7/5040 ... Jika Anda menghitung secara sinis x = x * (1 - x ^ 2/6 + x ^ 4 / 120 - x ^ 6/5040 ...), maka fungsi dalam tanda kurung menurun, dan itu akan terjadi bahwa jika y adalah angka berikutnya yang lebih besar untuk x, maka kadang-kadang sin y akan lebih kecil dari sin x. Sebaliknya, hitung sin x = x - x ^ 3 * (1/6 - x ^ 2/120 + x ^ 4/5040 ...) di mana ini tidak dapat terjadi.
Saat menghitung polinomial Chebyshev, Anda biasanya perlu membulatkan koefisien menjadi presisi ganda, misalnya. Tetapi sementara polinomial Chebyshev optimal, polinomial Chebyshev dengan koefisien dibulatkan menjadi presisi ganda bukanlah polinomial optimal dengan koefisien presisi ganda!
Misalnya untuk sin (x), di mana Anda memerlukan koefisien untuk x, x ^ 3, x ^ 5, x ^ 7 dll. Anda melakukan hal berikut: Hitung perkiraan sin terbaik x dengan polinomial (ax + bx ^ 3 + cx ^ 5 + dx ^ 7) dengan presisi lebih tinggi dari dua kali lipat, kemudian putaran ke presisi ganda, memberikan A. Perbedaan antara a dan A akan cukup besar. Sekarang hitung perkiraan terbaik (sin x - Axe) dengan polinomial (bx ^ 3 + cx ^ 5 + dx ^ 7). Anda mendapatkan koefisien yang berbeda, karena mereka beradaptasi dengan perbedaan antara a dan A. Putaran b untuk menggandakan presisi B. Kemudian perkiraan (sin x - Ax - Bx ^ 3) dengan polinomial cx ^ 5 + dx ^ 7 dan seterusnya. Anda akan mendapatkan polinomial yang hampir sebagus polinomial Chebyshev asli, tetapi jauh lebih baik daripada Chebyshev dibulatkan menjadi presisi ganda.
Selanjutnya Anda harus memperhitungkan kesalahan pembulatan dalam pemilihan polinomial. Anda menemukan polinomial dengan kesalahan minimum di polinomial mengabaikan kesalahan pembulatan, tetapi Anda ingin mengoptimalkan polinomial plus kesalahan pembulatan. Setelah Anda memiliki polinomial Chebyshev, Anda dapat menghitung batas untuk kesalahan pembulatan. Katakanlah f (x) adalah fungsi Anda, P (x) adalah polinomial, dan E (x) adalah kesalahan pembulatan. Anda tidak ingin mengoptimalkan | f (x) - P (x) |, Anda ingin mengoptimalkan | f (x) - P (x) +/- E (x) | Anda akan mendapatkan polinomial yang sedikit berbeda yang mencoba untuk menjaga kesalahan polinomial di mana kesalahan pembulatan besar, dan sedikit merelaksasi kesalahan polinomial di mana kesalahan pembulatan kecil.
Semua ini akan membuat Anda dengan mudah membulatkan kesalahan sebanyak 0,55 kali bit terakhir, di mana +, -, *, / memiliki kesalahan pembulatan paling banyak 0,50 kali bit terakhir.