Document

annuncio pubblicitario
5ASA Marzo 2015 Docente Salvatore Mosaico Introduzione al Calcolo Numerico (parte 1)
CALCOLO NUMERICO
Obiettivo del calcolo numerico è quello di fornire algoritmi numerici che, con un numero finito di
operazioni elementari, consentano di individuare la soluzione di un problema, eventualmente in forma
approssimata.
In genere gli algoritmi sono iterativi sequenziali, ovvero:
cominciano da valori iniziali per calcolare nuovi valori, a cui viene applicata la medesima formula, e
così via.
L’algoritmo è valido se la successione di valori calcolata arriva alla soluzione voluta.
La procedura deve individuare, a partire da una valutazione non corretta della soluzione,
approssimazioni via via migliori.
Attraverso questa procedura l’errore insito nella previsione iniziale viene ridotto a un limite accettabile,
fino all’ultimo valore, che viene assunto come soluzione del problema in esame.
Importante quanto la buona valutazione della soluzione è la messa a punto di algoritmi efficienti.
Si dice algoritmo efficiente la serie di procedure che permette di risolvere un problema nel
modo migliore.
Occorre ricorrere al calcolo numerico quando:
-
non esistono algoritmi esatti di risoluzione
-
gli algoritmi esatti non sono efficienti o producono un alto costo computazionale
-
L’utilizzo di un calcolatore permette di effettuare operazioni elementari fra numeri in tempi
molto brevi.
-
Gli algoritmi complessi sono comunque costituiti da operazioni elementari.
-
Occorre comunque tener presente che il calcolatore opera con numeri rappresentati da un
numero finito di cifre (numero di macchina).
Rappresentazione virgola mobile (Floating Point)
• La rappresentazione in virgola fissa non si presta a
rappresentare numeri molto grandi (es. 567 000 000000) o
molto piccoli (es. 0,0000000000000915)
• Per ovviare a ciò si utilizza la rappresentazione in virgola
mobile (floating point), detta anche a mantissa e
1
5ASA Marzo 2015 Docente Salvatore Mosaico Introduzione al Calcolo Numerico (parte 1)
caratteristica.
• Questo tipo di notazione si basa sulla rappresentazione
esponenziale dei numeri, detta anche notazione scientifica.
• Secondo tale notazione un numero reale N può essere
espresso nella seguente forma:
N = (-1)s * m * 2esp
Dove
s = segno 0 => + 1=> m = mantissa
esp = esponente o caratteristica
Formato floating point standard IEEE 754
lo standard internazionale più diffuso e quello stabilito
dall'IEEE (Institute for Electrical and Electronics Engineering)
identificato dalla sigla IEEE 754. Questo standard prevede
tre formati principali di rappresentazione
• l’esponente deve essere polarizzato ossia
Al valore dell’esponente originario occore sommare un certo
valore fisso detto bias 2n-1-1
Formato
Singola
precisione
Doppia
precisione
Quadrupla
precisione
N bit
Segno
32
1
4 bytes
64
1
8 bytes
Esponente
8
Mantissa
23
bias
127
11
52
1023
128
1
8 bytes
15
112
16383
Facciamo esempio Singola precisione
• 1 bit per il segno
2
5ASA Marzo 2015 Docente Salvatore Mosaico Introduzione al Calcolo Numerico (parte 1)
• 8 bit per l’esponente polarizzato biased 127 (si dice anche eccesso 127)
• 23 bit per la mantissa
normalizzata con la prima cifra significativa alla
sinistra del punto con hidden bit ovvero nella forma 1.XXXXXXXXX…X
1 prima della virgola viene omesso
Rappresentare in singola precisione (32 bit) il numero reale 43,6875
IL NUMERO È POSITIVO BIT 31 = 0
3
1
0
3 2
0 9
2 2
8 7
2 2
6 5
2
4
2 2
3 2
2 2
1 0
1
9
1 1
8 7
1 1
6 5
Covertiamo la parte intera
DIVIDENDO
DIVISORE
43
2
21
2
10
2
5
2
2
2
1
2
(43)1o=(101011)2
Covertiamo la parte frazionaria
(0,6875)1o
fattore1
fattore2
prodotto
0,6875
2
1,375
0,375
2
0,75
0,75
2
1,5
0,5
2
1
1 1
4 3
1
2
1 1 9 8 7 6 5 4 3 2 1 0
1 0
QUOZIENTE
21
10
5
2
1
0
parte frazionaria
0,375
0,75
0,5
0
(0,6875)1o=(0,1011)2
Dunque (43,6875)10 = (101011,1011)2
Normaliziamo il numero binario ottenuto
In modo che la forma sia 1.xxxxxx
(101011.1011)2 = 1, 010111011*25
3
RESTO
1
1
0
1
0
1 (bit + significativo)
parte intera
1 (bit + significativo)
0
1
1
5ASA Marzo 2015 Docente Salvatore Mosaico Introduzione al Calcolo Numerico (parte 1)
La parte intera non la considero (hidden bit o bit nascosto, o bit
implicito)
MANTISSA 010111011
COMPLETO a 23 bit (aggiungo tanti 0 a destra )
01011101100000000000000
3
1
0
3 2
0 9
2 2
8 7
2 2
6 5
2
4
2 2
3 2
0
2 2
1 0
1 0
1
9
1
1 1
8 7
1 1
1 1
6 5
0 1
1 1
4 3
1 0
1
2
0
1 1 9 8 7 6 5 4 3 2 1 0
1 0
0 0 0 0 0 0 0 0 0 0 0 0
Infine
ESPONTENTE = 5 in binario
Devo polarizzarlo aggiungendo bias 127 => 5 +127 = 132
(132)10 = (10000100)2
Risultato
3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 9 8 7 6 5 4 3 2 1 0
1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
01000010001011101100000000000000
Dunque il computer utilizzando un numero finite di cifre (64 bit o 32 bit)
Rappresenta spesso una approssimazione del valore teorico
4
5ASA Marzo 2015 Docente Salvatore Mosaico Introduzione al Calcolo Numerico (parte 1)
Arrotondamento e troncamento
I numeri reali hanno, in generale, infinite cifre dopo la virgola: i calcolatori ne possono rappresentare
solo un numero finito, anche se molto grande.
Ci sono due modi per memorizzare un numero reale con più cifre decimali di quelle rappresentabili sul
computer: arrotondamento e troncamento.
Troncamento.
Le cifre che non rientrano nel numero di quelle rappresentabili vengono ignorate.
Arrotondamento.
Se la prima cifra non rappresentabile è maggiore o uguale di 5, l’ultima cifra rappresentabile viene
aumentata di una unità, e le altre vengono ignorate; se invece è minore di 5 il numero viene troncato
Esempio: supponiamo di poter memorizzare solo quattro cifre.
Vogliamo rappresentare il numero 1,99857 (6 cifre)
Troncando si ottiene: 1,998
Arrotondando: 1,999
In generale l’arrotondamento è più preciso, ma richiede di fare un controllo in più.
Operazioni macchina.
Le operazioni con i numeri reali si effettuano riportando in virgola mobile il risultato di ogni operazione.
Questo procedimento, che è necessario per poter memorizzare i risultati delle operazioni, ha però
degli inconvenienti: ad esempio, non vale l’associatività della somma.
Esempio:
a=0,23371258 * 10^-4
b=0,33678429*10^2
c=-0,33677811*10^2
(a+b)+c diverso da a+(b+c) (verificare)
Questo perché nel primo caso stiamo sommando numeri di dimensione molto diversa tra loro (a e b)
5
5ASA Marzo 2015 Docente Salvatore Mosaico Introduzione al Calcolo Numerico (parte 1)
Vediamo esempio in excel
Un algoritmo Numerico tiene conto di come calcolare per limitare errori
6
Scarica