2012-03-11 11 views
16

converto gradi in radianti (gradi * Math.PI/180), ma perché il seguente:Perché Math.cos (90 * Math.PI/180) produce 6.123031769111 ... e non zero?

Math.cos(90 * Math.PI/180) 

resa 6,123031769111 ... e non Zero?

Sto cercando di eseguire rotazioni 2D utilizza matrici e i risultati sono completamente fuori di testa.

+2

Si dovrebbe mostrare più codice in modo da poter vedere un po 'di contesto. – Gabe

+2

@ Gabe- In realtà, il codice sopra è sufficiente. Prova a inserirlo in una console JS e otterrai effettivamente il risultato mostrato sopra. – templatetypedef

risposta

33

L'uscita

Math.cos(90 * Math.PI/180) 

è

6.123031769111886e-17 

noti il ​​e-17 al termine, il che significa che questo numero è 6.123 x 10 -17 . Questo è un numero così vicino a 0 che è effettivamente 0. Il motivo per cui non è identicamente 0 è dovuto a errori di arrotondamento nel formato doppio IEEE-754 che impedisce di ottenere una rappresentazione esatta di π/2 e causa errori di arrotondamento minuti nel calcolo del coseno.

A proposito, sono rimasto sorpreso anche quando il risultato è tornato a partire da un 6! È solo dopo che ho guardato alla fine che le cose hanno avuto un senso.

Spero che questo aiuti!

+6

e il fatto che 'Math.PI! = Π'. –

+3

+1. Forse aggiungere qualcosa come 'Math.cos (90 * Math.PI/180) .toFixed (15)' come soluzione semplice? –

+0

'' (Math.cos (90 * Math.PI/180) | 0) === 0'' – JCM

2

6.123233995736766e-17 è molto molto vicino allo zero. Basta arrotondare il numero.

3
6.123233995736766e-17 

è una notazione scientifica per un numero molto piccolo, vicino allo zero. Non è esattamente zero a causa degli errori di arrotondamento e così via.