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