napotkałem taki o to problem. może napiszę kod programiku pomocniczego i wynik:
#include <cmath>
#include <cstdio>
int main(int argc,char**argv)
{
double liczba,calkowita,ulamek;
printf("Podaj liczbe: ");
scanf("%lf",&liczba);
ulamek=modf(liczba,&calkowita);
printf("%lf = %lf + %lf\n",liczba,calkowita,ulamek) ;
liczba=ulamek;
liczba*=10.0;
ulamek=modf(liczba,&calkowita);
printf("%lf = %lf + %lf\n",liczba,calkowita,ulamek) ;
return 0;
}
Podaj liczbe: 3.3
3.300000 = 3.000000 + 0.300000
3.000000 = 2.000000 + 1.000000
to znaczy ja dobrze wiem z czego wynikają te błędy (a raczej niedokładności) przy mnożeniu przez 10.0, ale jak im zapobiec? czy trzeba za każdym razem wprowadzać tolerancję błędu i sprawdzać, czy:
(abs)(liczba-1.0)<EPSILON
czy może jest szybszy (a raczej gotowy) sposób?