appunti3s:errori_di_conversione
no way to compare when less than two revisions
Differences
This shows you the differences between two versions of the page.
— | appunti3s:errori_di_conversione [2020/06/08 22:19] (current) – created - external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Numeri interi ====== | ||
+ | Per i numeri interi (positivi o negativi) la conversione tra sistema base 10 e base 2 del computer è sempre esatta e priva di errori. | ||
+ | |||
+ | ====== Numeri con la virgola ====== | ||
+ | |||
+ | Dal punto di vista matematico invece possono accadere dei problemi con i numeri decimali (con virgola). | ||
+ | vedi [[http:// | ||
+ | |||
+ | I numeri decimali vengono memorizzati in due valori, mantissa ed esponente: | ||
+ | MANTISSA * BASE< | ||
+ | |||
+ | Anche le calcolatrici usano questa notazione esponenziale: | ||
+ | |||
+ | * La prima osservazione: | ||
+ | * Una seconda osservazione: | ||
+ | |||
+ | In tutti i casi appena descritti, poiché il computer ha un numero di cifre limitato, commetterà sicuramente un errore nel calcolo... | ||
+ | |||
+ | < | ||
+ | Tabella tratta da http:// | ||
+ | Converting Result | ||
+ | 0.1 0. | ||
+ | 0.1 × 2 = 0.2 < 1 0.0 | ||
+ | 0.2 × 2 = 0.4 < 1 0.00 | ||
+ | 0.4 × 2 = 0.8 < 1 0.000 | ||
+ | 0.8 × 2 = 1.6 ≥ 1 0.0001 | ||
+ | 0.6 × 2 = 1.2 ≥ 1 0.00011 | ||
+ | 0.2 × 2 = 0.4 < 1 0.000110 | ||
+ | 0.4 × 2 = 0.8 < 1 0.0001100 | ||
+ | 0.8 × 2 = 1.6 ≥ 1 0.00011001 | ||
+ | 0.6 × 2 = 1.2 ≥ 1 0.000110011 | ||
+ | 0.2 × 2 = 0.4 < 1 0.0001100110 | ||
+ | </ | ||
+ | |||
+ | <file cpp 10.cpp> | ||
+ | |||
+ | // questo programma è stato scritto da Fabio | ||
+ | // | ||
+ | // mostra che la differenza 1 - 1 non fa 0. | ||
+ | // perché il primo 1 è stato ottenuto moltiplicando 0.1*10 | ||
+ | // un' | ||
+ | // Gli errori diventano visibili solo quando si elimina la parte intera del numero (1) | ||
+ | // Dando modo all' | ||
+ | // | ||
+ | // in un sistema a 32 bit, il risultato della differenza dovrebbe essere | ||
+ | |||
+ | #include < | ||
+ | |||
+ | int main () | ||
+ | { | ||
+ | float differenza; | ||
+ | differenza = 0.1*10.0-1.0; | ||
+ | std::cout << differenza << " | ||
+ | return 0; | ||
+ | } | ||
+ | </ |
appunti3s/errori_di_conversione.txt · Last modified: 2020/06/08 22:19 by 127.0.0.1