Come fa una calcolatrice a trovare il valore del coseno di un angolo? Viene semplicemente salvato nella calcolatrice?
Sì, alcune calcolatrici potrebbero usare una tabella di Lookup per ottenere la risposta, o almeno una parte di essa.
Ma il coseno può essere calcolato con precisione crescente calcolando e sommando sempre più termini della sua serie di Taylor
Ho fatto un piccolo grafico che mostra le prime iterazioni di applicazione di questa serie:
Questo è un coseno centrato sull'origine. La linea nera tratteggiata è un coseno reale.
rosso = 1 iterazione (max k = 0)
verde = 2 iterazioni (max k = 1)
blu = 3 iterazioni (max k = 2)
magenta = 4 iterazioni (max k = 3)
ciano = 5 iterazioni (max k = 4)
Come potete vedere, si avvicina sempre più al valore reale del coseno. 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:
Articoli simili
- A e B sono due vettori e theta è l'angolo tra loro. Se |A×B|= underoot 3 di (A.B), qual è il valore di theta?
- Quale calcolatrice è la migliore calcolatrice RPN?
- Come viene salvato automaticamente un numero sconosciuto nel contatto WhatsApp?
- Come scoprire il mio numero di carta di debito completo quando viene salvato sul mio Google Play