Como os computadores calculam o seno?
Computadores e calculadoras não calculam o seno consultando uma tabela gigantesca, mas combinando redução de intervalo com aproximações polinomiais cuidadosamente escolhidas ou algoritmos como CORDIC, muitas vezes ajustados às restrições do hardware. Os comentários contrastam a série de Taylor ingênua (que pode ser imprecisa ou lenta) com polinômios baseados em Chebyshev/Remez, pequenas tabelas de busca e truques de ponto fixo usados em sistemas embarcados e consoles de jogos antigos. A discussão também destaca como os padrões de ponto flutuante definem com precisão a aritmética básica, mas deixam as funções trigonométricas mais flexíveis, levando a pequenas diferenças nos resultados entre plataformas.
Convergência, Série de Taylor e Problemas Numéricos
- A série de Taylor do seno converge globalmente e é relativamente rápida, mas a avaliação ingênua é numericamente frágil.
- Para |x| grande (por exemplo, x = 10) você precisa de muitos termos e enfrenta potências grandes, fatoriais grandes e cancelamento por sinais alternados; a precisão limitada amplifica o erro.
- Reescrever a série (por exemplo, em formas fatoradas) melhora a estabilidade, mas ainda não é ideal para implementações de nível de produção.
- Arcsin e outras funções trigonométricas inversas são apontadas como mais difíceis devido ao pior comportamento de convergência.
Aproximações Polinomiais e Remez
- A prática moderna: reduzir o argumento para um pequeno intervalo e então aproximar com polinômios de baixo grau (estilo Chebyshev / minimax de Remez) em vez de Taylor bruto em torno de 0.
- Alguns comentários questionam se um polinômio de exemplo específico veio realmente de Remez, apontando sua forma de erro semelhante à de Taylor e sua simetria.
- Remez é descrito como um algoritmo iterativo simples que pode ter dificuldades perto de polos; normas de erro ponderadas são preferidas em ponto flutuante.
Redução de Intervalo e Pequenas LUTs
- Implementações normalmente fazem redução de intervalo (por exemplo, com múltiplos de π/16 ou π/2) e depois aplicam um núcleo polinomial.
- Tabelas de busca muito pequenas (por exemplo, ~32 entradas ou valores em nπ/16) mais correção polinomial são comuns; LUTs completas em precisão dupla são inviáveis devido ao tamanho.
CORDIC vs Métodos Polinomiais
- CORDIC é destacado para hardware/FPGAs e microcontroladores minúsculos: soma e deslocamento, sem multiplicador genérico, bom para sin/cos juntos.
- Outros argumentam que CORDIC está obsoleto onde multiplicações são baratas, converge lentamente (≈1 bit por iteração) e é pior do que polinômios curtos em CPUs/GPUs modernas.
- Há desacordo sobre se os atuais sin/cos em x86/x87 ainda usam CORDIC internamente; as latências são compatíveis com várias dezenas de ciclos, mas não são conclusivas.
Determinismo em Ponto Flutuante e Padrões
- IEEE-754 define estritamente as operações básicas, mas apenas “recomenda” o comportamento para transcendentais; sin corretamente arredondado é difícil (dilema do construtor de tabelas).
- Como resultado,
sinpode diferir entre plataformas, CPUs (por exemplo, com FMA vs sem FMA), bibliotecas e opções de compilador. - Alguns ecossistemas distribuem suas próprias bibliotecas matemáticas para melhorar a consistência entre plataformas.
Usos Históricos e Práticos de Tabelas
- Softwares e jogos mais antigos (por exemplo, PCs pré-Pentium, consoles, demos retrô) comumente usavam tabelas trigonométricas pré-computadas; às vezes geradas por código auxiliar ou até por tabelas impressas.
- Em hardware moderno, os custos de memória e cache muitas vezes superam o benefício de LUTs grandes; fazer a conta pode ser mais rápido do que consultar uma tabela.