Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Błędnie obliczona liczba.

Ostatnio zmodyfikowano 2015-12-04 15:07
Autor Wiadomość
GrzesiekX
Temat założony przez niniejszego użytkownika
Błędnie obliczona liczba.
» 2015-12-04 14:42:53
Witam,

Zaczynam dopiero zabawę z C++. Mam mały problem z moim programem.
Program ma wykonać kilka działań matematycznych jednak wynik jest inny od oczekiwanego. Zastanawiam się nad tym już drugi dzień i w żaden sposób nie mogę wytłumaczyć sobie dlaczego działa w taki a nie inny sposób.

Chodzi o to że program, po wprowadzeniu od użytkownika liczby, ma wyświetlić tylko ostatnią cyfrę.
I tak:

Po wprowadzeniu liczby 456 program poprawnie zadziałał i zwrócił liczbę 6,
natomiast wpisując liczbę 354 program zwraca liczbę 3 zamiast 4.
Moje pytanie brzmi dlaczego tak się dzieje i jakie jest rozwiązanie tego problemu?

C/C++
#include <iostream>
using namespace std;

int main()
{
    double liczba = 0;
    int reszta = 0;
    double po_przecinku = 0;
   
    cout << "Wprowadz liczbe" << endl;
    cin >> liczba;
   
    po_przecinku = liczba / 10;
    reszta = liczba / 10;
    reszta =( po_przecinku - reszta ) * 10;
    cout << reszta << endl;
   
    return 0;
}

Podejrzewam że może tutaj dochodzić do zaokrąglania liczb całkowitych, po przeniesieniu do zmiennej 'reszta' ale '(po_przecinku-reszta)*10' jest obliczana jako typ double, zgodnie z najbardziej znaczącym typem dla wyrażenia, a obliczona wartość jest liczbą całkowitą.
Proszę mnie poprawić jeśli się mylę.



Wiem, że można to było zrobić w inny, prostszy sposób, ale chodzi mi o wyjaśnienie dlaczego program działa właśnie w taki sposób.

Pozdrawiam.
P-141387
carlosmay
» 2015-12-04 15:07:54
int reszta = 0;
 ta zmienna jest typu całkowitego,
a reszta zmiennych double. Różnice wychodzą po zaokrąglaniu wyników,
a później już wychodzą błędne obliczenia.

edit: najlepiej dodać zmienną typu 'double' i w niej zapisać wynik końcowy.
Przy wypisywaniu skorzystać z setprecision() (<iomanip>), lub rzutować wypisywany wynik na typ 'int'.
P-141389
« 1 »
  Strona 1 z 1