Błędnie obliczona liczba.
Ostatnio zmodyfikowano 2015-12-04 15:07
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? #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. |
|
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'. |
|
« 1 » |