2015-10-27 17 views
6

Io uso Meteor. Usa Javascript sia sul server che sul client.Math.sin() fornisce risultati diversi su server/client?

Quando eseguo Math.sin(356644061314425) * 10000 ottengo:

-9986.46139381927 sul server e

-9986.46115497749 sul client/browser/app

Perché è questo? Come posso evitare questo?

MODIFICA: le domande duplicate proposte si riferiscono ai gradi/radianti. Penso che il mio sia più un problema di runtime.

+0

Impostare per mostrare 3 posizioni decimali;) –

+0

probabilmente utilizza i float. Sai, i galleggianti non sono precisi ad un certo punto. –

+0

Possibile duplicato di [Unusual Math con risultati errati?] (Http://stackoverflow.com/questions/8691800/unusual-math-with-incorrect-results) –

risposta

6

Penso che la risposta a "Come posso evitare questo?" è "non puoi".

La risposta a "Perché è questo?" è che l'implementazione javascript di Math.sin non è determinata.

Vedi http://www.ecma-international.org/ecma-262/5.1/#sec-15.8.2.16

particolare "sin (x) restituisce un dipendente dall'implementazione approssimazione al seno di x. L'argomento è espresso in radianti." (il mio corsivo).

Ma la mia sperimentazione suggerisce che i browser moderni attualmente utilizzano solo una delle due implementazioni, con Chrome diverso dagli altri browser (e apparentemente più accurato).

Problemi correlati