La convergence est obtenue avec une dizaine de termes.
Pour rappel il faut utiliser judicieusement les parentheses:
ex.: x^(10) = (x*(x*x))*(x*x)
Soit 3 multiplications, le resultat (x*x) etant stocké et reutilisé.
Dependant de si on dispose de quelques octets de memoire les coefficients peuvent-etre précalculés.
On s'en tire avec une 15aine de multiplications.
On peut diminuer d'un facteur p le nombre de termes a calculer, et donc le nombre de multiplications, en utilisant une table precalculee de 2^p elements de facon a ce que c < 1/(2^p).
Avec 2 tables on peut arriver a exprimer
la racine sous forme de r= racine(k)*(table(i)+(x-xi)*alpha(i))
ou
- k est une puissance de 4
- xi est la plus proche valeur de x= N/k dont la racine est stockee dans table
- table(i) = xi^1/2
- alpha(i) est une constante valant (table(i+1)-table(i))/p).
- p est un pas constant valant x(i+1)-xi
Soit un certain nb de decalages de bits (racine(k))
3 multiplications (il y en a une implicite dans table(i)),
2 additions.
L'essentiel est de s'assurer que la precision obtenue est inferieure a la precision max representable (2^-24 sur un flottant 32 bits)
Pour cela on calcule le max de racine(N)-r en fonction de p.
Si l'erreur est trop importante, on ajoute un terme au DL, ce qui diminue la taille des tables necessaires, mais augmente le nb d'operations.
Il faut faire un compromis entre le nb de cycles de calcul et la taille memoire necessitée par la table.
De toute facon, le travail d'ingenieur est un travail de compromis n'est-ce pas?