Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    643

    [Java] somma numeri float

    codice:
    import java.io.*; 
    
    public class SommaFloat { 
    
    public static void main ( String args[] ) { 
    
    float f1=0.02f; 
    float f2=0.03f; 
    float f3=0.05f; 
    float f4=0.2f; 
    float f5=0.7f; 
    
    float somma = f1 + f2 + f3 + f4 + f5; 
    System.out.println("Somma Float = " + somma); 
    
    sommainversa= f5 + f4 + f3 + f2 + f1; 
    System.out.println("Somma float inversa = " + sommainversa); 
    
    } 
    }
    I risultati che mi dà sono:

    somma = 1.0 ed è giusto
    e
    sommainversa = 0.99999994 ed è sbagliato

    Qualcuno sa a cosa è dovuto ?

    grazie.

  2. #2
    immagino non sia quello, ma nel pezzo di codice non sembra tu abbia dichiarato float sommainversa

    poi prova a scrivere

    codice:
    float f4=0.2f; 
    float f5=0.7f;
    come

    codice:
    float f4=0.20f; 
    float f5=0.70f;
    sto andando a rigor di logica, notando le differenze, non per esperienza purtroppo

  3. #3
    Prima di tutto sistema sommainversa: questa variabile non è dichiarata e quindi il file non compila nemmeno.
    Se riesci ad eseguire il programma è solo perchè avrai qualche classe compilata con lo stesso nome che va, ma il risultato non è di quello che hai scritto.
    ..::200 post il 1 settembre 2004::..
    ..::100 13/07/2004::..
    ..): Web Site (pazienza però) ..
    VASCO castiga chi non lecca la FIGA

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    643
    Ho solo dimenticato di scriverlo qui, ma era ovvio

    float sommainversa

    L'avevo dichiarata come l'altra (somma).
    resta il fatto che non capisco i due risultati diversi.
    grazie.

  5. #5
    Originariamente inviato da Daisyland
    Ho solo dimenticato di scriverlo qui, ma era ovvio

    float sommainversa

    L'avevo dichiarata come l'altra (somma).
    resta il fatto che non capisco i due risultati diversi.
    grazie.
    hai provato anche a specificare i due decimali? prova anche a fare i conti in double e convertire successivamente in float

  6. #6
    codice:
    float f1=0.02f; 
    float f2=0.03f; 
    float f3=0.05f; 
    float f4=0.2f; 
    float f5=0.7f; 
    
    float somma = f1+f2; 
    somma+=f3;
    somma+=f4;
    somma+=f5;
    System.out.println("Somma Float = " + somma); 
    
    float sommainversa= f5 + f4; 
    sommainversa += f3;
    sommainversa += f2;
    sommainversa += f1;
    System.out.println("Somma float inversa = " + sommainversa);
    Il risultato è lo stesso usando questo codice. L'esempio sembra molto didattico e immagino che crei dei problemi di precisione, siccome il float ha una precisione limitata non riesce a rappresentare tutti i dati e quindi perde dei decimali.
    Visti i risultati diversi il problema è sui risultati parziali. Anche se in entrambi i sensi di somma i parziali non sono corretti (float non è abbastanza preciso per rappresentare correttamente i parziali) nel caso di somma gli errori parziali si compensano, nel caso di somma inversa non si compensano e ottieni un risultato errato.

    Chiaro?

    ..::200 post il 1 settembre 2004::..
    ..::100 13/07/2004::..
    ..): Web Site (pazienza però) ..
    VASCO castiga chi non lecca la FIGA

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 © 2024 vBulletin Solutions, Inc. All rights reserved.