Entendendo seno e cosseno na prática
A maioria dos cursos de matemática começa com o triângulo retângulo. Isso funciona até você precisar calcular algo que não se encaixa num triângulo bonito de 30-60-90. A definição que realmente importa é a do círculo unitário. Você pega um ângulo, mede a partir do eixo x positivo indo no sentido anti-horário, e projeta o ponto na circunferência. A coordenada horizontal é o cosseno. A vertical é o seno. Pronto. Se você está programando isso, a primeira coisa que precisa decidir é se vai usar graus ou radianos. Isso parece óbvio até dar erro no seu código às três da manhã. Na biblioteca padrão da grande maioria das linguagens, seno e cosseno esperam radianos. Se você passar graus direto, o resultado vai estar completamente errado e muitas vezes você não percebe porque o número numérico em si parece plausível. A conversão é simples: multiplique por pi e divida por 180. Eu uso uma função wrapper que faz isso automaticamente no início de qualquer projeto novo.
O que todo mundo esquece sobre função seno e cosseno
Existe um problema real com argumentos grandes. Quando o ângulo passa de 1000 radianos, a precisão da redução de módulo 2pi começa a degradar porque o pi tem infinitas casas decimais e o computador só armazena uma aproximação finita. O resultado não explode, mas os bits menos significativos já estão errados. Eu me deparei com isso recentemente num projeto de simulação de ondas sonoras onde as frequências acumulavam erros faseais ao longo de milhares de iterações. A solução foi usar uma biblioteca como GNU MPFR para aritmética de precisão arbitrária na etapa de redução de argumento, ou então refatorar o código para manter o ângulo sempre dentro de um intervalo pequeno somando fases incrementalmente em vez de recalcular do zero a cada passo. Outro detalhe que pouca gente menciona: seno e cosseno são funções periódicas com período de 2pi, mas elas também têm simetrias úteis. Seno é ímpar, ou seja, sen(-x) = -sen(x). Cosseno é par, cos(-x) = cos(x). Isso não é só teoria, economiza chamadas de função quando você está otimizando código num loop apertado. Se o seu ângulo é negativo, inverte o sinal do resultado em vez de chamar a função de novo. A mesma coisa vale para identities como sen(pi/2 - x) = cos(x), que permitem transformar um cosseno num seno e vice-versa quando a implementação da sua biblioteca é mais eficiente para uma delas.
O algoritmo CORDIC é interessante se você precisa calcular isso em hardware sem multiplicador. Ele substituia multiplicações por deslocamentos e adições em processadores embarcados mais antigos. Em CPUs modernas com unidades de ponto flutuante dedicadas, as instruções sin e cos nativas geralmente vencem em velocidade e precisão. Mas ainda aparece em DSPs e microcontroladores sem FPU, então vale conhecer. Se você quer praticar, a melhor coisa é escrever sua própria aproximação usando série de Taylor. Os primeiros termos são suficientes para ângulos perto de zero, mas a convergência fica lenta conforme o ângulo se afasta da origem. Reduza o argumento para o intervalo de -pi a pi primeiro, depois aplique a série. Para uma implementação decente, você precisa de pelo menos 7 a 9 termos dependendo da precisão que busca. Isso leva uns dez minutos para rodar e te dá uma intuição muito melhor sobre como essas funções se comportam do que decorar fórmulas.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Referência rápida: - sen(0) = 0, cos(0) = 1
- sen(pi/2) = 1, cos(pi/2) = 0 - sen(pi) = 0, cos(pi) = -1
- Identidade fundamental: sen²(x) + cos²(x) = 1 Não adianta memorizar esses valores sem entender a geometria por trás. O círculo unitário resolve isso em dois minutos. O resto é aplicação.