Zaokrąglanie Liczb

2017-06-29 23:53

Rejestracja: 2 lata temu

Ostatnio: 1 rok temu

0

A więc pisze sobie program który pobiera liczbę z przecinkiem ,którą ma stopniowo zamieniać ją na liczbę całkowitą. Program co przejście pętli mnoży liczbę razy dziesięć i ma przestać gdy liczba jest już całkowita. Sprawdza to warunek który porównuje liczbę do jej zaokrąglenia. Program działał na większości przypadkach dopóki nie postanowiłem wpisać 25.67 ,więc pokornie proszę o pomoc.
tak wygląda kod:

int main(){
    for(int j=0;;j++){
        double liczba;
        cin>> liczba;
           for(int i=0;;i++){
                if(liczba== round(liczba)){
                    break;}
                else{
                    liczba*=10;
                    przecinek++;
                    cout<<"liczba-   "<< liczba<<  endl ;
                }
            }
      }
}

Pozostało 580 znaków

2017-06-30 00:06

Rejestracja: 12 lat temu

Ostatnio: 2 godziny temu

tak się nie porównuje liczb zmiennoprzecinkowych. 25.67 zapewne nie ma dokładnej reprezentacji binarnej i mnożenie przez 100 nie doprowadzi do idealnej liczby całkowitej. Zapewne 25.67 w zapisie binarnym efektywnie daje coś w stylu 25.6699999997 i stąd twój problem.
Potrzebny ci taki warunek: fabs(liczba - round(liczba)) < 0.000001.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
Dzięki teraz działa - Treeman 2017-06-30 00:17
Jednak znalazłem przypadki dla których program po zamienieniu warunku dalej nie działa jest to np. 0.0006 lub 0.6567 i nie rozumiem czemu - Treeman 2017-06-30 19:41
pokaż cały aktualny kod, bo u mnie działa. A najlepiej opisz swoje zadanie, bo samo rozwiązanie jest dziwne. https://wandbox.org/permlink/7b98bs2LLPniWog5 - MarekR22 2017-06-30 22:25

Pozostało 580 znaków

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