Comment les ordinateurs calculent-ils les valeurs du péché? [fermé]

28

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?

zack1544
la source
10
Google "CORDIC". Google "Série Taylor". Et vos pensées sur la mémoire ne sont pas claires.
Eugene Sh.
8
La méthode "memory" est une technique d'optimisation, fréquemment utilisée (le nom est "table de consultation"). Mais non, au départ, l'ordinateur ne l'a pas. Mais si jamais vous vous demandez comment l'ordinateur calcule <placeholder>, google " <placeholder>algorithme de calcul". Cela fonctionne mieux que de demander sur SE dans la plupart des cas ..
Eugene Sh.
5
En plus de CORDIC et de Taylors, assurez-vous de rechercher également Chebyshev couplé à des techniques de minimax non linéaires. Taylor limite l' erreur moyenne , tandis que Chebyshev limite l' erreur maximale et se ferme également plus rapidement. Le minimum est nécessaire car les constantes ne sont pas infiniment précises et les opérations non plus. Et vous devez exploiter les symétries, comme un fou!
jonk
3
Savez-vous qu'il existe une série qui peut être utilisée pour calculer le péché tout comme pour les cos, les journaux, les exposants, les pi, les racines carrées, etc.
Andy aka
2
Bien sûr, vous pouvez avoir du contenu dans la mémoire de l'ordinateur "en premier lieu" - comment pensez-vous que les ordinateurs démarrent? Les valeurs initiales peuvent être câblées dans un circuit, intégrées dans des cellules de mémoire en lecture seule ou les couches de métallisation d'un ic, brûlées dans des fusibles, stockées en tant que charge piégée ainsi que lues sur disque, bande perforée ou interrupteurs à bascule - toute méthode utilisable pour le logiciel est en principe utile aussi pour les tables précalculées, et en fait de nombreux algorithmes nécessitent différentes constantes. Ce qui est le mieux doit vraiment être décidé en fonction des besoins, de la technologie et même des ressources qui restent après d'autres besoins.
Chris Stratton

Réponses:

30

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 .

Spehro Pefhany
la source
2
CORDIC est plutôt pour une conversion de fonction fixe purement matérielle (sa première application historique). Pour un ordinateur équipé d'un FPU, les approximations polynomiales sont plus rapides et plus adaptées car elles réutilisent les opérateurs arithmétiques existants au lieu d'une machine spéciale CORDIC shift-and-add.
TEMLIB
1
@TEMLIB Oui, c'est un point valable, je vais ajouter cela à la réponse. CORDIC a également été utilisé dans les premières calculatrices scientifiques, comme le HP-35.
Spehro Pefhany
À ma connaissance, CORDIC a eu sa première implémentation matérielle dans la calculatrice de bureau HP 9100A. Il avait une carte de circuit imprimé d'environ un pied carré, recouverte de diodes, qui servait de ROM stockant les paramètres utilisés par les algorithmes CORDIC.
Hot Licks
@HotLicks - vous vous trompez, CORDIC a été développé et utilisé dans un ordinateur de navigation en vol près de dix ans avant le HP 9100A.
Chris Stratton
@ChrisStratton - Je me tiens corrigé.
Hot Licks
14

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.

Dave Tweed
la source