¿Cómo calculan las computadoras los valores de pecado? [cerrado]

28

¿Cómo calcula una computadora un valor de pecado? Lógicamente, cuando lo pienso, la única forma aparente es poner muchos valores sin en la memoria, y cuando un valor sin se debe "calcular", simplemente extraería datos de una dirección de memoria específica (por ejemplo, sin (x) extraer datos de la dirección de memoria que contiene el valor de sin (x)) Esa parece ser la única forma posible de hacerlo. ¿O hay una función que pueda usarse para calcular el pecado de un valor? Realmente estoy tratando de preguntar cómo una computadora calcula el pecado en un nivel base. ¿Hay alguna manera de aproximar los valores sin usando una función diferente compuesta de más operaciones "básicas", y la ALU podría realizar múltiples operaciones "básicas" para aproximar el valor sin, o simplemente está extrayendo valores de la memoria?

zack1544
fuente
10
Google "CORDIC". Google "serie Taylor". Y tus pensamientos sobre la memoria no son claros.
Eugene Sh.
8
El método de "memoria" es una técnica de optimización, de uso frecuente (el nombre es "tabla de búsqueda"). Pero no, inicialmente la computadora no lo tiene. Pero si alguna vez está deambulando sobre cómo calcula la computadora <placeholder>, google " <placeholder>algoritmo de cálculo". Funciona mejor que preguntar sobre SE en la mayoría de los casos ...
Eugene Sh.
55
Además de CORDIC y Taylors ', asegúrese de buscar también Chebyshev junto con técnicas minimax no lineales. Taylor limita el error promedio , mientras que Chebyshev limita el error máximo y también se cierra más rápido. Se necesita Minimax porque las constantes no son infinitamente precisas y tampoco lo son las operaciones. ¡Y necesitas explotar las simetrías, como loco!
jonk
3
¿Sabe que hay una serie que puede usarse para calcular el pecado tal como lo hay para cos, logs, exponentes, pi, raíces cuadradas, etc.?
Andy también conocido como
2
Por supuesto, puede tener contenido en la memoria de la computadora "en primer lugar": ¿cómo cree que se inician las computadoras? Los valores iniciales pueden conectarse a un circuito, incorporarse en celdas de memoria de solo lectura o las capas de metalización de un ic, quemarse en fusibles, almacenarse como carga atrapada, así como leerse desde el disco, la cinta perforada o los interruptores de palanca - cualquier método utilizable para el software en principio es útil también para tablas precalculadas, y de hecho muchos algoritmos necesitan varias constantes. Lo mejor en realidad debe decidirse en función de los requisitos, la tecnología e incluso qué recursos quedan después de otras necesidades.
Chris Stratton

Respuestas:

30

Por lo general, las funciones sin (x) de alta resolución se implementarían con un algoritmo CORDIC (Computadora digital de rotación de coordenadas), que se puede lograr con un pequeño número de iteraciones utilizando solo cambios y sumas / restas y una pequeña tabla de búsqueda. El documento original The CORDIC Computing Technique de Jack Volder es de 1959. También funciona bien cuando se implementa con hardware en una FPGA (y un algoritmo similar se implementaría en una FPU de hardware para aquellos micros que tienen una FPU).

Para una resolución más baja, por ejemplo, para crear una onda sinusoidal sintetizada para un inversor o motor VFD (Variable Frequency Drive), una tabla de búsqueda (LUT) con o sin interpolación funciona bien. Solo es necesario almacenar los valores para un cuadrante de la onda sinusoidal debido a la simetría.

Como señala @Temlib, los algoritmos utilizados dentro de las FPU modernas usan la reducción de rango seguida de una evaluación que usa algo como el algoritmo Remez para limitar el error absoluto máximo. Se puede encontrar más en este documento de Intel Verificación formal de funciones trigonométricas de coma flotante .

Spehro Pefhany
fuente
2
CORDIC es más bien para una conversión de función fija de hardware puro (su primera aplicación histórica). Para una computadora con una FPU, las aproximaciones polinómicas son más rápidas y más adecuadas, ya que reutilizan los operadores aritméticos existentes en lugar de una máquina especial de cambio y suma CORDIC.
TEMLIB
1
@TEMLIB Sí, ese es un punto válido, lo agregaré a la respuesta. CORDIC también se utilizó en las primeras calculadoras científicas, como la HP-35.
Spehro Pefhany
Que yo sepa, CORDIC tuvo su primera implementación de hardware en la calculadora de escritorio HP 9100A. Tenía una tarjeta de circuito impreso de aproximadamente un pie cuadrado, cubierta con diodos, que servía como la ROM que almacenaba los parámetros utilizados por los algoritmos CORDIC.
Hot Licks el
@HotLicks: sería incorrecto, CORDIC fue desarrollado y utilizado en una computadora de navegación en vuelo casi diez años antes que el HP 9100A.
Chris Stratton
@ChrisStratton - Estoy corregido.
Hot Licks
14

La mayoría de las bibliotecas de trigonometría se basan en aproximaciones polinómicas , lo que proporciona el mejor equilibrio entre velocidad y precisión. Por ejemplo, una docena de operaciones de multiplicación y suma / resta son suficientes para proporcionar una precisión de precisión única completa para seno y coseno.

Dave Tweed
fuente