Les tables de recherche ont été mentionnées dans les commentaires. Il existe deux approches.
Créez rapidement une table longue de 256 octets, avec chaque valeur suivante la racine carrée de l'index correspondant. C'est rapide car vous utilisez l'argument comme index pour accéder directement à la bonne valeur. L'inconvénient est qu'il a besoin d'une longue table, avec beaucoup de valeurs en double.
Compact
Comme indiqué, un entier de 8 bits ne peut avoir que des valeurs de 0 à 255, et les racines carrées correspondantes sont de 0 à 16 (arrondies). Construisez une table à 16 entrées (base zéro) avec la nième entrée la valeur maximale pour l'argument pour lequel la racine carrée est n. Le tableau ressemblerait à ceci:
0
2
6
12
20
etc.
Vous parcourez la table et vous arrêtez lorsque vous rencontrez une valeur supérieure ou égale à votre argument. Exemple: racine carrée de 18
set index to 0
value[0] = 0, is less than 18, go to the next entry
value[1] = 2, is less than 18, go to the next entry
value[2] = 6, is less than 18, go to the next entry
value[3] = 12, is less than 18, go to the next entry
value[4] = 20, is greater than or equal to 18, so sqrt(18) = 4
Alors que la table de recherche rapide a un temps d'exécution fixe (une seule recherche), ici le temps d'exécution est plus long pour les arguments de valeur supérieure.
Pour les deux méthodes, en choisissant différentes valeurs pour le tableau, vous pouvez choisir entre une valeur arrondie ou tronquée pour la racine carrée.