I polinomi di Chebyshev, come menzionato in un'altra risposta, sono i polinomi in cui la più grande differenza tra la funzione e il polinomio è il più piccola possibile. È un inizio eccellente.
In alcuni casi, l'errore massimo non è quello che ti interessa, ma l'errore relativo massimo. Ad esempio per la funzione seno, l'errore vicino a x = 0 dovrebbe essere molto più piccolo che per valori più grandi; vuoi un piccolo errore relativo . Quindi calcoleresti il polinomio di Chebyshev per sin x / x e moltiplicheresti quel polinomio per x.
Successivamente devi capire come valutare il polinomio. Si desidera valutarlo in modo tale che i valori intermedi siano piccoli e quindi gli errori di arrotondamento siano piccoli. Altrimenti gli errori di arrotondamento potrebbero diventare molto più grandi degli errori nel polinomio. E con funzioni come la funzione seno, se sei incurante, potrebbe essere possibile che il risultato che calcoli per sin x sia maggiore del risultato per sin y anche quando x <y. Sono quindi necessarie un'attenta scelta dell'ordine di calcolo e il calcolo dei limiti superiori per l'errore di arrotondamento.
Ad esempio, sin x = x - x ^ 3/6 + x ^ 5/120 - x ^ 7/5040 ... Se si calcola in modo ingenuo sin x = x * (1 - x ^ 2/6 + x ^ 4 / 120 - x ^ 6/5040 ...), allora tale funzione in parentesi sta diminuendo, e si accadere che se y è il numero più grande successiva alla x, poi a volte sin y saranno più piccole di quelle sin x. Invece, calcola sin x = x - x ^ 3 * (1/6 - x ^ 2/120 + x ^ 4/5040 ...) dove ciò non può accadere.
Quando si calcolano i polinomi di Chebyshev, di solito è necessario arrotondare i coefficienti per raddoppiare la precisione, ad esempio. Ma mentre un polinomio di Chebyshev è ottimale, il polinomio di Chebyshev con coefficienti arrotondati alla doppia precisione non è il polinomio ottimale con coefficienti di doppia precisione!
Ad esempio per sin (x), dove hai bisogno di coefficienti per x, x ^ 3, x ^ 5, x ^ 7 ecc., Fai quanto segue: Calcola la migliore approssimazione di sin x con un polinomio (ax + bx ^ 3 + cx ^ 5 + dx ^ 7) con precisione superiore alla doppia, quindi arrotondare a per raddoppiare la precisione, dando A. La differenza tra a e A sarebbe piuttosto grande. Ora calcola la migliore approssimazione di (sin x - Ax) con un polinomio (bx ^ 3 + cx ^ 5 + dx ^ 7). Ottieni coefficienti diversi, perché si adattano alla differenza tra a e A. Round b per doppia precisione B. Quindi approssimativo (sin x - Ax - Bx ^ 3) con un polinomio cx ^ 5 + dx ^ 7 e così via. Otterrai un polinomio che è quasi buono come il polinomio originale di Chebyshev, ma molto meglio di Chebyshev arrotondato alla doppia precisione.
Successivamente dovresti tenere conto degli errori di arrotondamento nella scelta del polinomio. Hai trovato un polinomio con un errore minimo nel polinomio che ignora l'errore di arrotondamento, ma desideri ottimizzare il polinomio più l'errore di arrotondamento. Una volta che hai il polinomio di Chebyshev, puoi calcolare i limiti per l'errore di arrotondamento. Dì che f (x) è la tua funzione, P (x) è il polinomio ed E (x) è l'errore di arrotondamento. Non vuoi ottimizzare | f (x) - P (x) |, si desidera ottimizzare | f (x) - P (x) +/- E (x) |. Otterrai un polinomio leggermente diverso che cerca di mantenere gli errori polinomiali in basso quando l'errore di arrotondamento è grande e rilassa gli errori polinomiali un po 'dove l'errore di arrotondamento è piccolo.
Tutto ciò ti consentirà di arrotondare facilmente gli errori al massimo 0,55 volte l'ultimo bit, dove +, -, *, / avranno errori di arrotondamento al massimo 0,50 volte l'ultimo bit.