Passaggio da float a double

di il
2 risposte

Passaggio da float a double

Ciao a tutti,
posto un semplice programmino per calcolare,partendo da"t=0",i valori di "t" via via che gli somma sempre la stessa quantita "dt" fornita da me in ingresso da tastiera fino a un certo valore anch'esso da tastiera.
#include <iostream>
#include <iomanip>
typedef double DB;
using namespace std;

int main() {

DB t,dt,tmax;
t=0;
cout<<"dammi dt:   "<<endl;
cin>>dt;
cout<<"dimmi ora l'istante di tempo in cui fermare il conteggio"<<endl;
cin>>tmax;
cout<<setw(10)<<"t"<<setw(10)<<"dt"<<endl;
while (t<tmax){
t = t+dt;
cout<<setw(10)<<t<<setw(10)<<dt<<endl;
}
}
.

Nel caso in cui si scelga "dt=0.05" e "tmax=15" accade che fino all'istante "t=6" tutto ok cioè t viene aumentato progressivamente di 0.05. Oltre il 6.05 però anzichè passare a 6.10 passa invece a 6.10001 poi 6.15001 poi ancora 6.20001 ecc ecc per tanti conteggi.Se scelgo invece precisione "double" il problema non si verifica più. Qualcuno saprebbe dirmi cosa succede di preciso?

2 Risposte

  • Re: Passaggio da float a double

    Succede che con la precisione di un float certi valori decimali non possono essere esattamente rappresentati in binario se non con qualche approssimazione.

    Per capire meglio, studia i "problemi di rappresentazione dei valori reali decimali in binario".
  • Re: Passaggio da float a double

    Capito,grazie mille!
Devi accedere o registrarti per scrivere nel forum
2 risposte