La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

1 Numeri interi e numeri in virgola mobile F. Bombi 2 6 novembre 2003.

Presentazioni simili


Presentazione sul tema: "1 Numeri interi e numeri in virgola mobile F. Bombi 2 6 novembre 2003."— Transcript della presentazione:

1 1 Numeri interi e numeri in virgola mobile F. Bombi 2 6 novembre 2003

2 2 Dati in Java Riferimenti – Classi – Interfacce – Array – Stringhe Dati primitivi – boolean – Dati numerici byte, short, int, longchar Integral: byte, short, int, long e char floatdouble Virgola mobile: float e double

3 3Integral 4 tipi di numeri interi con segno – byte, short, int e long 1 tipo di numeri interi senza segno: char Se non ci sono motivi particolari si utilizzano sempre dati int base 2complemento a 2 I dati numerici sono rappresentati allinterno della JVM in base 2 e in complemento a 2 ( a parte i char ) Overflow manipolare il singolo bit Overflow a parte, possiamo ignorare che i dati numerici sono rappresentati in base 2 a meno che non si voglia manipolare il singolo bit

4 4 Operatori bit a bit shift Operatori di scorrimento (shift) – A sinistra << i << 3 – A destra (con segno) >> i >> 3 – A destra (logico) >>> i >>> 3 Operatori logici bit a bit – ~ NOT – & AND – | OR – ^ OR esclusivo

5 5 Esempi di operazioni bit a bit // verificare un bit int i = 1; // maschera if ((k & i<<3) == 0)… i 000....00001 i<<3 000....01000 k 101....01010 & 000....01000 | 101....01010 k 101....00010 & 000....00000 | 101....01010 AND OR XOR 0 0 0 0 0 0 1 0 1 1 1 0 0 1 1 1 1 1 1 0 // forzare a 0 (zero) int i = 1; // maschera k = k & (~(i<<3)); // forzare a 1 int i = 1; // maschera k = k |(i<<3);

6 6 Dati in virgola mobile IEEE Standard for Binary Floating-Point Arithmetic, I dati in virgola mobile rappresentano in modo approssimato numeri reali in un formato conforme a quanto stabilito dello standard IEEE 754 (IEEE Standard for Binary Floating-Point Arithmetic, ANSI/IEEE Standard 754-1985) Due formati – float – float Semplice precisione 32 bit – double – double Doppia precisione 64 bit double Per minimizzare i problemi dovuti agli arrotondamenti, di norma, si utilizzano solo dati in formato double (lunità aritmetica dei Pentium dispone di registri per le operazioni in virgola mobile di 80 bit)

7 7 Un numero in virgola mobile è rappresentato nella seguente forma: n = sm2 e Dove – s = +1–1 – s = +1 oppure –1 – m2 24 2 53 – m intero positivo minore di 2 24 oppure 2 53 – e–149104 –1075970 – e intero compreso fra –149 e 104 oppure –1075 e 970 +0.0–0.0+ - Not-e-Number NaN È possibile inoltre rappresentare lo zero ( +0.0 e –0.0 ), + o - e Not-e-Number ( NaN )

8 8 SEM Formati dei dati in virgola mobile 1 bit Ampiezza dei campi: S 1 bit 811 bit E 8 o 11 bit 2352 bit M 23 o 52 bit In decimale la precisione di un numero in virgola mobile è di circa 5 cifre oppure di circa 15 cifre

9 9 La mantissa o frazione 24 53 1 La mantissa è un numero intero di 24 bit o di 53 bit con il bit più significativo sempre uguale a 1 23 52 Della frazione vengono rappresentati solo 23 o 52 bit Cambiando lesponente la frazione può essere pensata come un numero del tipo1.xxxxxxxxx

10 10 Attenzione A causa dellapprossimazione con cui un numero reale è rappresentato in virgola mobile in genere – a + b + c c + b + a – a ( b + c ) a b + a c – ecc.

11 11 public class Fp { public static void main (String[] arg) { double a, b, c; a = 1.0e100; b = -1.0e100; c = 1.0; System.out.println ("a: " + a + " b: " + b + " c: " + c); System.out.println ("a + b + c: " + (a+b+c)); System.out.println ("a + c + b: " + (a+c+b)); System.out.println ("a*a*b*b: " +a*a*b*b); System.out.println ("a*a*a*b: " +a*a*a*b); for (int i = 0; i < 100; i++) { double z = 1.0/i; if (z*i != 1.0) System.out.println ("l: " + i + " z*i: " + z*i); } a = 12345.6; System.out.println ((int)a + " " + (int)-a); a = 0.0; b = - 0.0; System.out.println (a + " " + b + " " + b/1.0 + " " + (a==b)); a = 1e308; b = 100.; c = -99.9999999999; System.out.println ("a(b+c): " + (a*(b+c)) + " (a*b + a*c): " + (a*b + a*c)); System.out.println ("a*b: " + (a*b) + " (a*c): " + (a*c)); } a: 1.0E100 b: -1.0E100 c: 1.0 a + b + c: 1.0 a + c + b: 0.0 a*a*b*b: Infinity a*a*a*b: -Infinity l: 0 z*i: NaN l: 49 z*i: 0.9999999999999999 l: 98 z*i: 0.9999999999999999 12345 -12345 0.0 -0.0 -0.0 true a(b+c): 1.000017846308765E298 (a*b + a*c): NaN a*b: Infinity (a*c): -Infinity


Scaricare ppt "1 Numeri interi e numeri in virgola mobile F. Bombi 2 6 novembre 2003."

Presentazioni simili


Annunci Google