Comment un ordinateur calcule-t-il une valeur de péché? Logiquement, quand j'y pense, la seule façon apparente est de mettre de nombreuses valeurs de sin en mémoire, et quand une valeur de sin doit être "calculée", elle extraira simplement les données d'une adresse mémoire spécifique. (Ex. Sin (x) extraire des données de l'adresse mémoire contenant la valeur de sin (x)) Cela semble être la seule façon possible de le faire. Ou existe-t-il une fonction qui peut être utilisée pour calculer le péché d'une valeur? J'essaie vraiment de demander comment un ordinateur calcule le péché au niveau de base. Existe-t-il un moyen d'approximer les valeurs du péché en utilisant une fonction différente composée d'opérations plus "basiques", et l'ALU serait capable de faire plusieurs opérations "basiques" pour approximer la valeur du péché, ou s'agit-il simplement d'extraire des valeurs de la mémoire?
la source
<placeholder>
, google "<placeholder>
algorithme de calcul". Cela fonctionne mieux que de demander sur SE dans la plupart des cas ..Réponses:
Les fonctions sin (x) à haute résolution sont généralement implémentées avec un algorithme CORDIC (COrdiate Rotation DIgital Computer), qui peut être accompli avec un petit nombre d'itérations en utilisant uniquement des décalages et des ajouts / soustractions et une petite table de recherche. Le document original The CORDIC Computing Technique de Jack Volder date de 1959. Il fonctionne également très bien lorsqu'il est implémenté avec du matériel dans un FPGA (et un algorithme similaire serait implémenté dans un FPU matériel pour les micros qui ont un FPU).
Pour une résolution inférieure, par exemple pour créer une onde sinusoïdale synthétisée pour un variateur ou un moteur VFD (Variable Frequency Drive), une table de correspondance (LUT) avec ou sans interpolation fonctionne bien. Il est seulement nécessaire de stocker les valeurs pour un quadrant de l'onde sinusoïdale en raison de la symétrie.
Comme le souligne @Temlib, les algorithmes utilisés dans les FPU modernes utilisent une réduction de plage suivie d'une évaluation utilisant quelque chose comme l' algorithme Remez pour limiter l'erreur absolue maximale. Plus d'informations peuvent être trouvées dans cet article d'Intel Vérification formelle des fonctions trigonométriques à virgule flottante .
la source
La plupart des bibliothèques trigonométriques informatiques sont basées sur des approximations polynomiales , ce qui donne le meilleur équilibre entre la vitesse et la précision. Par exemple, une douzaine d'opérations de multiplication et d'ajout / soustraction suffisent pour donner une précision pleine précision pour le sinus et le cosinus.
la source