Post

Visualizzazione dei post con l'etichetta Range di valori rappresentabili

Rappresentare numeri grandissimi

DOMANDA: E' possibile rappresentare in Java dei numeri grandissimi che hanno un valore oltre quello consentito dai tipi di dati primitivi long e int? RISPOSTA: Come abbiamo visto nel post sul range di valori rappresentabili con i diversi tipi di dati primitivi, effettuare un'operazione il cui risultato vada oltre tale limite comporta un errore di calcolo con conseguenze potenzialmente disastrose. La soluzione a tali limitazioni esiste: la prima, più complessa, rientra nell'analisi numerica e in algoritmi di troncamento, arrotondamento e bit shifting, ma non è scopo di questo post. La seconda invece è messa a disposizione da Java con le classi java.math.BigInteger e java.math.BigDecimal (rispettivamente per i numeri interi e decimali). Guardiamo con un esempio come funzionano: package bignumbers; import java.math.BigInteger; public class BigNumbers { public static void main(String[] args) { // rappresentazione errata oltre i limiti

Tipi primitivi: range di rappresentazione

DOMANDA: Quali sono i range di valori rappresentabili dai tipi di dati primitivi Java? RISPOSTA: Benché non siano facilissimi da ricordare, è importante sapere i limiti di rappresentazione dei diversi tipi per prevenire o evitare di trovarsi a fronteggiare errori di calcolo difficilmente individuabili. Ecco una tabella riepilogativa dei diversi range : BYTE (8 bit) :             da     -128     a     127   SHORT (16 bit) :           da     -32.768     a     32.767 INT (32 bit) :             da     -2.147.483.648     a     2.147.483.647 LONG (64 bit) :            da     -9.223.372.036.854.774.808     a     9.223.372.036.854.774.807 FLOAT (32 bit) :           da    1,4e -045      a     3,4e +038 DOUBLE (64 bit) :          da    4,9e -324      a     1,8e +308 CHAR (16 bit) - Unicode:  da     0    a     65.536 BOOLEAN (1  bit) :             true     o     false Ed ecco cosa succede a sbagliare il tipo di dato in un calcolo: public class RangeTest {   publ