English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
Tutte le categorie

Il prof. ci ha proiettato un programma tratto da un libro che eseguiva la moltiplicazione di 7 con un int e con un flot. Con l'int il risultato era esatto, mentre con il flot il risultato era di molto maggiore. Eppure erano 2 semplici cicli for. Qual'è il motivo dell'errore con i float?

2007-03-01 11:42:35 · 4 risposte · inviata da Anonymous in Computer e Internet Programmazione e Design

4 risposte

Perché i float e i double permettono sì di avere un sacco di bei numeri con la virgola ma hanno un piccolo difetto: non tutti possono essere espressi. Pertanto, in certi casi non proprio rari, la rappresentazione in virgola mobile si discosta lievemente dal valore esatto; stimolando poi questo errore in modo opportuno (con un ciclo FOR per esempio) si può arrivare a errori piuttosto grossi.

L'esempio più famoso di numero non rappresentabile con un float/double è probabilmente 0.1. Le calcolatrici di adesso riescono a capire quando il risultato che stanno per dare è fasullo e se la cavano con un arrotondamento ma se provi da un qualsiasi linguaggio di programmazione a calcolare:

1f - 0.9f - 0.1f
(f sta per float)

ti ritroverai con un numero diverso da 0.

Perché accade? Perché intuitivamente parlando, è impossibile rappresentare infiniti numeri con un numero finito di bit.

La soluzione? Se dovessi aver bisogno di un'elevata precisione per il tuo progetto/programma, dovrai usare altri tipi per i dati. Per esempio, a quanto ho sentito, in ambito finanziario si usano gli "interi grossi" ( BigDecimal in Java). In pratica, se devi sommare 10,33€ con 34,45€, li moltiplichi entrambi per 100, li rappresenti con gli interi e alla fine quando dovrai restituire una cifra con i centesimi ti limiterai ad utilizzare la divisione con resto.

2007-03-01 12:46:20 · answer #1 · answered by Lohkiv 3 · 0 0

ciao!
innanzi tutto dovresti specificare il linguaggio di cui stai parlando...
comunque dovrebbe essere a causa dei byte occupati dai due tipi di dato...
generalmente il float 4 byte e l'int 2...
poi dipende anche se sono signed o unsigned...

2007-03-01 20:10:04 · answer #2 · answered by Anonymous · 0 0

dovresti vedere l'intervallo di valori dell' int e del float.

2007-03-01 20:03:45 · answer #3 · answered by ThePunisher 2 · 0 0

no sono adatto per questa vdomanda scusami ,,
mi dispiace - --

2007-03-01 19:47:42 · answer #4 · answered by Anonymous · 0 0

fedest.com, questions and answers