Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Moltiplicazioni sbagliate

    Salve.
    Sto provando a fare girare questo codice che scrive le potenze di un numero intero, ma i risultati non sono corretti.
    codice:
    public class TestNumeri1 {
    
        public static void main(String[] args) {
    
        int numeroBase;
        numeroBase = 1411;
    
        String spazio = "    ";
    
        int quadrato, cubo, quartaPot, quintaPot, sestaPot;
        double sestaPotDouble;
        quadrato = numeroBase * numeroBase;
        cubo = quadrato * numeroBase;
        quartaPot = cubo * numeroBase;
        quintaPot = quartaPot * numeroBase;
        sestaPot = quintaPot * numeroBase;
    
        sestaPotDouble = Math.pow(numeroBase, 6);
    
        System.out.println();
        System.out.println(spazio + "numero base:    " + numeroBase);
        System.out.println(spazio + "quadrato:       " + quadrato);
        System.out.println(spazio + "cubo:           " + cubo);
        System.out.println(spazio + "quarta potenza: " + quartaPot);
        System.out.println(spazio + "quinta potenza: " + quintaPot);
        System.out.println(spazio + "sesta potenza:  " + sestaPot);
    
        System.out.println();
    
        System.out.println("Altro modo per calcolare la sesta potenza: " 
                   + "usando Math.pow(): " + 
                   + sestaPotDouble);
        System.out.println();
    
        }
    
    }
    Perché le potenze dalla terza in poi vengono negative e numericamente sbagliate?

    Cambiando numeroBase in 3, i risultati sono corretti, già mettendo 10 sballano dalla quinta potenza... Come se ci fosse un dominio di valori oltre il quale i risultati non sono attendibili...
    Ultima modifica di Gas75; 19-05-2016 a 14:14

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    Perché le potenze dalla terza in poi vengono negative e numericamente sbagliate?
    int, 32 bit (signed), range -2147483648 ... +2147483647

    1411 * 1411 * 1411 = 2809189531
    Quindi: overflow
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Grazie, ci avevo pensato ma credevo un output differente in caso di overflow.
    Quindi se volessi calcolare senza rischiare overflow la sesta potenza di un numero intero, con un codice Java?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    Quindi se volessi calcolare senza rischiare overflow la sesta potenza di un numero intero, con un codice Java?
    Dipende dal valore .... non solo dalla potenza. 1411^6 ci sta al pelo in un long (64 bit). Se fosse 1500 ... overflow!

    Quindi in generale e per precisione "arbitraria": java.math.BigInteger
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Ok, perfetto per generalizzare... Sempre che non produca altri effetti collaterali...

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.