Visualizzazione dei risultati da 1 a 6 su 6

Discussione: errore della sun

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755

    errore della sun

    vi siete mai accorti che facendo il calcolo:
    codice:
    Math.cos(Math.toRadians(90));
    restituisce un valore errato?
    restituisce come valore:
    cos(90)=6.123233995736766E-17
    invece che zero.

    bè la mia è una semplice osservazione/critica e mi chiedo perchè non risolvono questo,a parer mio,banale errore?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    502

    Re: errore della sun

    Originariamente inviato da zipangulu
    vi siete mai accorti che facendo il calcolo:
    codice:
    Math.cos(Math.toRadians(90));
    restituisce un valore errato?
    restituisce come valore:
    cos(90)=6.123233995736766E-17
    invece che zero.

    bè la mia è una semplice osservazione/critica e mi chiedo perchè non risolvono questo,a parer mio,banale errore?
    Il tutto nasce dalla conversione di 90° in gradianti: il valore di pi greco impostato sarà perforza approssimato.

    Non vorrei dire la mia solita cretinata, ma anche nel linguaggio C, i calcoli in virgola mobile presentano tali "anomalie": essendo un numero di bit finito quello che rappresenta un numero, ci devono essere per forza delle approssimazioni. E infatti in C è da evitare un confronto di eguaglianza tra due double..

    Se è un bug della Sun, un errore, o solo il normale comportamento di tutto, lo lascio a chi è esperto

    PS: comunque un valore di tot alla meno 17.... è zero , basta prendere un epsilon sufficientemente piccolo, o grande, a piacere
    al volante son nervoso

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    si lo so che un numero *10^-17 è praticamente zero(anche se non proprio),ma in alcun casi può portare ad errori grossolani

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: errore della sun

    Originariamente inviato da zipangulu
    codice:
    Math.cos(Math.toRadians(90));
    restituisce un valore errato?
    Se vai a vedere il codice di Math, vedresti:

    codice:
        public static double toRadians(double angdeg) {
    	return angdeg / 180.0 * PI;
        }
    Quindi ... beh, fa proprio solo il calcolo e basta. E quel calcolo introduce sicuramente "errori" (PI tra l'altro è arrotondato alla precisione del double). Math.cos() invoca cos() di StrictMath che è implementato "nativo" (quindi non so come). Ma pure lui introdurrà di certo degli errori.

    Insomma .... solo con calcoli non puoi evitare questi errori. L'unica sarebbe fare dei test sui valori specifici .... ma a che livello? Sarebbe logico a livello di sin/cos. Se il valore è in un range molto ristretto di radianti, allora ritorna 1.
    Evidentemente non hanno fatto un simile test.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    si l'avevo intuito che fosse probabilmente un errore derivante dall'approssimazione anche del valore di pigreco del quale ancora tuttora si conosce un numero relativamente ristretto delle sue cifre decimali,o da altre approssimazioni derivanti alla ristretta rappresentazione di valori double...

  6. #6

    Re: Re: errore della sun

    Originariamente inviato da Rubox
    Non vorrei dire la mia solita cretinata, ma anche nel linguaggio C, i calcoli in virgola mobile presentano tali "anomalie": essendo un numero di bit finito quello che rappresenta un numero, ci devono essere per forza delle approssimazioni.
    E' giusto e valido per qualsiasi linguaggio e qualsiasi processore.

    Se ti serve una precisione maggiore (ma cmq ovviamente non può essere infinita), puoi usare BigDecimal invece di double, considera però che è moooolto più lenta

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.