Como um computador calcula um valor sin? Logicamente, quando penso nisso, a única maneira aparente é colocar muitos valores de pecado na memória, e quando um valor de pecado precisa ser "calculado", basta extrair dados de um endereço de memória específico (por exemplo, sin (x) extrair dados do endereço de memória que contém o valor de sin (x)) Essa parece ser a única maneira possível de fazer isso. Ou existe uma função que pode ser usada para calcular o pecado de um valor? Estou realmente tentando perguntar como um computador calcula o pecado em um nível básico. Existe uma maneira de aproximar valores de pecado usando uma função diferente composta de operações mais "básicas", e a ULA seria capaz de executar várias operações "básicas" para aproximar o valor de pecado, ou é apenas extrair valores da memória?
— zack1544
Google "CORDIC". Google "série Taylor". E seus pensamentos sobre a memória não são claros.
O método "memory" é uma técnica de otimização usada com freqüência (o nome é "tabela de pesquisa"). Mas não, inicialmente o computador não o possui. Mas se você está sempre pensando em como o computador calcula <placeholder>, pesquise no Google " <placeholder>algoritmo de cálculo". Funciona melhor do que perguntar em SE na maioria dos casos ..
Além do CORDIC e do Taylors, verifique também o Chebyshev juntamente com técnicas minimax não lineares. Taylor limita o erro médio , enquanto Chebyshev limita o erro máximo e fecha mais rápido também. O Minimax é necessário porque as constantes não são infinitamente precisas e nem as operações. E você precisa explorar simetrias, como um louco!
Você está ciente de que existe uma série que pode ser usada para calcular o pecado, assim como existe para cos, toras, expoentes, pi, raízes quadradas etc.
Claro que você pode ter conteúdo na memória do computador "em primeiro lugar" - como você acha que os computadores são inicializados? Os valores iniciais podem ser conectados a um circuito, construídos em células de memória somente leitura ou nas camadas de metalização de um ic, queimadas em fusíveis, armazenadas como carga retida e lidas a partir de disco, fita perfurada ou comutadores - qualquer método utilizável para software também é, em princípio, útil para tabelas pré-computadas e, de fato, muitos algoritmos precisam de várias constantes. O que é melhor realmente precisa ser decidido com base nos requisitos, na tecnologia e até nos recursos que sobram após outras necessidades.
Normalmente, as funções sin (x) de alta resolução seriam implementadas com um algoritmo CORDIC (COdiate Rotation DIgital Computer), que pode ser realizado com um pequeno número de iterações usando apenas turnos e adicionar / subtrair e uma pequena tabela de pesquisa. O artigo original The CORDIC Computing Technique de Jack Volder é de 1959. Também funciona bem quando implementado com hardware em um FPGA (e um algoritmo semelhante seria implementado em um FPU de hardware para os micros que possuem um FPU).
Para uma resolução mais baixa, por exemplo, para criar onda senoidal sintetizada para um inversor ou inversor de frequência de motor (Variable Frequency Drive), uma tabela de pesquisa (LUT) com ou sem interpolação funciona bem. Só é necessário armazenar os valores para um quadrante da onda senoidal devido à simetria.
Como o @Temlib aponta, os algoritmos usados ​​nas modernas FPUs usam a redução de alcance, seguida de uma avaliação usando algo como o algoritmo Remez para limitar o erro absoluto máximo. Mais informações podem ser encontradas neste documento da Intel Verificação formal de funções trigonométricas de ponto flutuante .
CORDIC é mais para uma conversão de função fixa de hardware puro (sua primeira aplicação histórica). Para um computador com uma FPU, as aproximações polinomiais são mais rápidas e mais adequadas, pois reutilizam os operadores aritméticos existentes em vez de uma máquina CORDIC especial de troca e adição.
@TEMLIB Sim, esse é um ponto válido, acrescentarei isso à resposta. O CORDIC também foi utilizado nas primeiras calculadoras científicas, como a HP-35.
Que eu saiba, a CORDIC teve sua primeira implementação de hardware na calculadora de mesa HP 9100A. Tinha uma placa de circuito impresso de cerca de um metro quadrado, coberta com diodos, que servia como ROM para armazenar os parâmetros usados ​​pelos algoritmos CORDIC.
@ HotLicks - você estaria incorreto, o CORDIC foi desenvolvido e usado em um computador de navegação a bordo quase dez anos antes do HP 9100A.
@ ChrisStratton - Estou corrigido.
A maioria das bibliotecas trigonométricas de computador é baseada em aproximações polinomiais , o que fornece o melhor equilíbrio entre velocidade e precisão. Por exemplo, uma dúzia de operações de multiplicação e adição / subtração é suficiente para fornecer uma precisão total de precisão única para seno e cosseno.