Visualizzazione risultati 1 fino 6 di 6

Discussione: [Javascript] Math.cos, valori insoliti

  1. #1
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito [Javascript] Math.cos, valori insoliti

    Salve,
    sto utilizzando le funzioni seno e coseno, ma con javascript ho notato che la funzione coseno ( Math.cos ) restituisce valori "insoliti", per quanto mi riguarda.

    Ad esempio:
    Codice:
    Math.cos(Math.PI / 2)
    Restituisce 6.123233995736766e-17. A quanto io sappia PI/2 corrisponde a 90° e il coseno vale 0.
    Lo stesso vale per 270° ( 3 * (PI / 2) ), Math.cos(3 * (Math.PI / 2)) restituisce -1.8369701987210297e-16; ma non vale 0?

    Cioè questo è da quanto mi hanno insegnato a scuola.

    Ho provato con vari browser: IE 9, Firefox 4.0b6 e 3.6.12, Opera 11 Alpha e Safari 5.02
    Tutti quanti restituiscono i valori che ho citato sopra!

    La domanda è: sbaglio io o sbagliano loro ?
    Ultima modifica di javascripter : 05-11-2010 alle ore 00.11.44 Motivo: cos 90° = 0

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Tu vs tutti i browser, chi starà sbagliando?

    Il coseno di 90° o 270° è zero, ed il risultato che ottieni, 6.123233995736766e-17, è 0.000000000000000006 in notazione scientifica. Direi che è abbastanza corretto, no?

  3. #3
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,652

    Predefinito

    Citazione Originalmente inviato da javascripter Visualizza messaggio
    Restituisce 6.123233995736766e-17. A quanto io sappia PI/2 corrisponde a 90° e il coseno vale 1.
    A parte che il coseno a 90° è 0 e non 1, perché lo devi guardare sulle ascisse e non sulle ordinate!....

    Comunque, quel valore va bene, perché infatti è circa zero. Non è 0 "spaccato" perché nemmeno PI è precisissimo ^^

    Ciao!

    EDIT: (ri)anticipato!

  4. #4
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Non ha sbagliato Javascript: cos 90° = cos 270° = 0 (e non 1, il coseno è l'ascissa del cerchio goniometrico, non l'ordinata).

    E' invece sen 90° = 1 e sen 270° = -1 (il seno è l'ordinata del cerchio goniometrico).

    Sul fatto che poi non ti venga esattamente zero, ma qualcosa di molto piccolo, è frutto dei normali errori di calcolo che hanno le operazioni in virgola mobile in un PC.

    Vuoi provare con qualcosa di più semplice? Prova a scrivere un ciclo che stampi un conteggio da 0 a 100 con incremento di 0.1: prima o poi vedrai che i risultati non sono esattamente quelli che ti aspetti...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  5. #5
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    Tu vs tutti i browser, chi starà sbagliando?

    Il coseno di 90° o 270° è zero, ed il risultato che ottieni, 6.123233995736766e-17, è 0.000000000000000006 in notazione scientifica. Direi che è abbastanza corretto, no?
    In effetti sembrava improbabile .

    Grazie per il chiarimento, non ci avevo nemmeno fatto caso a e-17
    Cercavo in tutti i modi di avere 0 come risultato

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    A parte che il coseno a 90° è 0 e non 1, perché lo devi guardare sulle ascisse e non sulle ordinate!....

    Comunque, quel valore va bene, perché infatti è circa zero. Non è 0 "spaccato" perché nemmeno PI è precisissimo ^^

    Ciao!

    EDIT: (ri)anticipato!
    Si, scusa ma mi son confuso

    Citazione Originalmente inviato da dementialsite Visualizza messaggio
    Non ha sbagliato Javascript: cos 90° = cos 270° = 0 (e non 1, il coseno è l'ascissa del cerchio goniometrico, non l'ordinata).

    E' invece sen 90° = 1 e sen 270° = -1 (il seno è l'ordinata del cerchio goniometrico).

    Sul fatto che poi non ti venga esattamente zero, ma qualcosa di molto piccolo, è frutto dei normali errori di calcolo che hanno le operazioni in virgola mobile in un PC.

    Vuoi provare con qualcosa di più semplice? Prova a scrivere un ciclo che stampi un conteggio da 0 a 100 con incremento di 0.1: prima o poi vedrai che i risultati non sono esattamente quelli che ti aspetti...

    Stammi bene...
    Già, ho notato. Ad un certo punto ci sono risultati strani ( a partire da 54.2 )
    Gazie mille, ti starò bene

  6. #6
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Ti consiglio di leggere la voce di Wikipedia che parla dei numeri in virgola mobile.
    Per capire a fondo l'argomento devi saper convertire un numero da una base ad un'altra, non solo quelli interi, ma anche quelli decimali.
    Per esempio il numero 0.1 (base 10) è uguale ad 1/10, se provi ad effettuare la divisione in binario (1/1010) otterrai un numero periodico (0.0001100110011...), per questo 0.1 non si può rappresentare perfettamente come numero in virgola mobile, è infatti approssimato.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •