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?
fonte
<placeholder>
, pesquise no Google "<placeholder>
algoritmo de cálculo". Funciona melhor do que perguntar em SE na maioria dos casos ..Respostas:
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 .
fonte
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.
fonte