CodeGym/Java Blog/Random-IT/Parola chiave mobile Java
John Squirrels
Livello 41
San Francisco

Parola chiave mobile Java

Pubblicato nel gruppo Random-IT
membri
Ad un certo punto nello sviluppo della tecnologia informatica, divenne chiaro che le unità di elaborazione centrale necessitavano di dispositivi hardware per elaborare i numeri in virgola mobile. Oggi tutte le architetture informatiche possono funzionare efficacemente con tali numeri. Naturalmente anche nei linguaggi di programmazione non si può fare a meno dei corrispondenti tipi di dati. In Java esistono due tipi di dati in virgola mobile: float e double. La parola chiave Java Float definisce un numero reale che occupa 32 bit in memoria. Parleremo di tali numeri in questo articolo.

Numeri in virgola mobile. Come vengono memorizzati i numeri reali in un computer?

Per memorizzare i numeri reali nella memoria del computer, viene allocato un certo numero di bit. Un numero reale viene memorizzato come segno (più o meno), mantide ed esponente. Qual è la mantissa e l'esponente è meglio spiegato con un esempio. La massa approssimativa della luna è 7* 1022. Qui 7 è la mantide, in 22 l'esponente. Quando si visualizzano numeri grandi o, viceversa, molto piccoli sullo schermo, è possibile vedere una voce come 7E22. Questo è il numero in virgola mobile, e 7 qui è la mantide, e 22 è l'esponente o potenza di 10. Questa notazione è chiamata notazione esponenziale.

Parola chiave Java float e parola chiave Java doppia

I valori float (numeri in virgola mobile o numeri reali) in Java sono rappresentati dai tipi float e double . Sono queste parole chiave che vengono utilizzate per memorizzare valori fino a un certo segno dopo la virgola decimale. double sono numeri con doppia precisione, il più vicino possibile ai valori dati o ottenuti a seguito di calcoli. Java Double viene utilizzato per qualsiasi calcolo matematico (radice quadrata, seno, coseno, ..), nonché per tutti i calcoli in cui è importante una certa precisione. il tipo di dati float viene utilizzato per un tipo a virgola mobile meno preciso. Viene utilizzato molto raramente per risparmiare memoria. Qui sotto abbiamo una tabella con le informazioni principali su float e double, nonché le loro differenze.
Galleggiante Doppio
Principale Float è un valore a precisione singola È un valore a doppia precisione
Dimensione predefinita 4 byte (32 bit) 8 byte (64 bit)
Valore di default 0.0f 0,0
Allineare da 1.4e–045 a 3.4e+038 da 4.9e–324 a 1.8e+308
A cosa serve Per risparmiare memoria lavorare con i numeri frazionari in modo relativamente accurato
Quindi la parola chiave Float indica un numero, un valore a precisione singola che occupa 32 bit o 4 byte in memoria. Su alcuni processori, lavorare con tali numeri è più veloce e, come già accennato, occupano meno spazio rispetto ai numeri con doppia precisione. Tuttavia, è impossibile dirlo in modo inequivocabile con rapidità. Diciamo che alcuni processori moderni elaborano esattamente i numeri a precisione doppia più velocemente.

Java Float e doppia dichiarazione

Puoi dichiarare un numero di tipo double allo stesso modo dei numeri di altri tipi:

double myDouble = 2.7;
Tuttavia, se rappresenti un numero in virgola mobile in questo modo, il compilatore ti richiederà di modificare il tipo del numero in double. Ecco un esempio errato di variabile float :

public class FloatExample {
   public static void main(String[] args) {
//double and float variables 
       double myDouble = 2.7;
       float myFloat = 3.14;
   }
}
Ecco cosa succede se esegui questo programma:

Error:(4, 25) java: incompatible types: possible lossy conversion from double to float
Il fatto è che non è desiderabile utilizzare numeri float e questo dovrebbe essere fatto solo per risparmiare memoria. Tutti i numeri frazionari reali in Java sono Double per impostazione predefinita e anche la sintassi del linguaggio lo enfatizza. Se vuoi veramente lavorare con il tipo float, devi specificarlo esplicitamente con una f che termina il numero.

public class FloatExample {
   public static void main(String[] args) {
//double and float variables
       double myDouble = 2.7;
       float myFloat = 3.14f;
   }
}
A proposito, i numeri float e double possono essere scritti in forma esponenziale.

float myFloat2 = 2E22f;
double myDouble2 = 3e10;
Se si utilizzano numeri sufficientemente grandi nella loro rappresentazione "normale", Java li visualizzerà immediatamente in forma esponenziale. Facciamo un esempio:

public class FloatExample {
   public static void main(String[] args) {
//float variables
               float myFloatNumber1=2182818284590.45f;
               float myFloatNumber2=19822612787260.141592181f;
               System.out.println("myFloatNumber1 = " + myFloatNumber1);
               System.out.println("myFloatNumber2 = " + myFloatNumber2);
       System.out.println("myFloatNumber1 + myFloatNumber2 = " + myFloatNumber1 + myFloatNumber2);
           }
       }
Il risultato del lavoro di questo programma è qui:
mioFloatNumber1 = 2.1828183E12 mioFloatNumber2 = 1.98226121E13 mioFloatNumber1 + mioFloatNumber2 = 2.1828183E121.98226121E13

Esempio di numeri speciali float e doppi

Esistono tre numeri speciali in virgola mobile nel linguaggio Java, utilizzati per indicare overflow ed errori. Eccoli:
  • L'infinito positivo è il risultato della divisione di un numero positivo per 0. Rappresentato dalle costanti Double.POSITIVE_INFINITY e Float.POSITIVE_INFINITY .

  • L'infinito negativo è il risultato della divisione di un numero negativo per 0. Rappresentato dalle costanti Double.NEGATIVE_INFINITY e Float.NEGATIVE_INFINITY .

  • NaN (non un numero) rappresenta il calcolo di 0/0 o la radice quadrata di un numero negativo. Rappresentato dalle costanti Double.NaN e Float.NAN .

Ecco un esempio di utilizzo di questi numeri in virgola mobile speciali:

public class FloatExample {
   public static void main(String[] args) {
       int myInt = 1;
       float zero = 0.0f;
       double negZero = -0.0;
       double negativeInfinity = Double.NEGATIVE_INFINITY;
       double positiveInfinity = Float.POSITIVE_INFINITY;

       System.out.println(myInt / zero);
       System.out.println(myInt / negZero);
       System.out.println(zero == negZero);
       System.out.println(negativeInfinity * 0);
       System.out.println(positiveInfinity+negativeInfinity);

   }
}
Il risultato è:
Infinito -Infinito vero NaN NaN

La doppia precisione è sufficiente?

Infatti, nonostante la doppia precisione del tipo Double , utilizzare numeri in virgola mobile, ad esempio, nei calcoli finanziari, non è la soluzione migliore perché gli errori di arrotondamento sono inaccettabili. Quindi, prova a visualizzare sullo schermo l'output del seguente programma.

public class FloatExample {
   public static void main(String[] args) {
       System.out. println( "2.0 - 1.1 = " + (2.0 - 1.1));
   }
}
Otterrai il seguente risultato:
2,0 - 1,1 = 0,8999999999999999
Sarebbe logico supporre che il risultato sarà 0,9. Tuttavia, tali errori sono abbastanza comuni e sono associati alla rappresentazione binaria interna dei numeri. Non possiamo, ad esempio, rappresentare il valore esatto di ⅓ come frazione decimale; ovviamente, ci sono restrizioni simili nel sistema binario. Se l'attività richiede l'eliminazione degli errori di arrotondamento, Java dispone della classe BigDecimal per questo.
Commenti
  • Popolari
  • Nuovi
  • Vecchi
Devi avere effettuato l'accesso per lasciare un commento
Questa pagina non ha ancora commenti