Como é que uma calculadora encontra o valor do cosseno de um ângulo? Acaba de ser guardado na calculadora?
Sim, algumas calculadoras podem estar usando uma tabela de pesquisa para obter a resposta, ou pelo menos parte dela.
Mas o cosseno pode ser calculado com precisão crescente calculando e somando mais e mais termos de sua série Taylor
>>br> Fiz um pequeno gráfico mostrando as primeiras iterações da aplicação desta série:
>>br> Este é um co-seno centrado na origem. A linha preta pontilhada é um co-seno real.
red = 1 iteração (max k = 0)
green = 2 iterações (max k = 1)
blue = 3 iterações (max k = 2)
magenta = 4 iterações (max k = 3)
cyan = 5 iterações (max k = 4)
Como se pode ver, está cada vez mais próximo do valor real do co-seno. If we carried it on to infinity it would exactly match.
But you can see, even after just a handful of iterations, it is very closely matching the real shape up to where it first crosses the x-axis (where x = pi/2). And that's all we need, because the rest of the wave can be constructed by reversing it (horizontally and vertically), which is very easily done in code.
I would guess that the first few values of ((-1)^k)/(2k)! are stored in a lookup table for optimisation.
Edit: Okay, I got interested in the challenge and wrote a little cosine function of my own, using the taylor expansion.
- int NUM_ITERATIONS = 3;
- float[] LUT = new float[NUM_ITERATIONS];
- int factorial(int k) {
- int f = 1;
- k++;
- while (k-->1) f *= k;
- return f;
- }
- void setupLUT() {
- for (int k=0; k
- LUT[k] = pow(-1.0,k) / factorial(k*2);
- }
- float taylorSeries(float x) {
- float f = 0;
- for (int k=0; k
- f += pow(x,k*2.0) * LUT[k];
- return f;
- }
- float myCosine(float x) {
- x = abs(x) % TWO_PI;
- if ( x>PI ) x = TWO_PI-x;
- return (x
- }
It's surprisingly accurate, even with only 3 iterations:
Artigos semelhantes
- Uma vez que a bateria do novo Galaxy S6 acaba por ser removível, há alguma razão para que não tenha sido possível criar uma bateria alargada?
- A e B são dois vetores e theta é o ângulo entre eles. Se |A×B|= abaixo do ponto 3 de (A.B), qual é o valor de theta?
- Qual calculadora é a melhor calculadora RPN?
- Como enviar uma mensagem de difusão no WhatsApp se o nosso número não estiver guardado