Kłopot z folat

0

Witam,
Mam problem z odejmowaniem floatów. Wykonuję program na zajęcia i w momencie gdy wynikiem odejmowania jest 0 to program zwraca wartość typu 2,28983e-15. Program ma wydawać resztę lub też informować że nie może wydać reszty. Nad drugą częścią polecenia się jeszcze nie skupiłem. Oto kod:

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
    double tab[14]={200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01};
    int il[14];
    for (int a=0; a<14; a++)
    {
        cout<<"Podaj ilosc "<<tab[a]<<": ";
        cin >> il[a];   
    }
    double i;
    cin >> i;
    for (int a=0; a<15; a++)
    {
        while (true)
        {
              if (tab[a]<=i && il[a]!=0)
              {
                 cout<<tab[a]<<": ";
                 cout<<i<<"-"<<tab[a]<<"="<<i-tab[a]<<"    ";
                 i=i-tab[a];           
                 cout<<i<<endl;
                 il[a]--;  
              }
              else break;
        }    
    }
       
    system("PAUSE");
    return EXIT_SUCCESS;
}

 
2

2,28983e-15 to 2,28983 * 10^(-15) czyli 0,00000000000000228983. Problemem jest zaokrąglanie floatów. Komputer nie może przechować dokładnie wartosci ułamków dziesietnych, stosuje przyblizenia, zaokrąglenia które wychodzą bokiem tak jak tutaj. Rozwiązanie: licz na groszach, a zmienne przerób na inty.

0

Dzięki :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1