• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Błąd w obliczeniach

Cloud VPS
–1 głos
495 wizyt
pytanie zadane 19 sierpnia 2019 w C i C++ przez Mavimix Dyskutant (8,420 p.)

Mam taki kod:

licznik = 2;
				liczba[0] = 7;
				liczba[1] = 8;
				liczba[2] = 9;

			for(int k = licznik; k>=0; k--)
			{
				obliczenia += pow(10, k)*liczba[k];
			}

Analogicznie powinno wyświetlić 987, a wyświetla 986. Nieważne co wpiszę to i tak wynik jest o 1 mniejszy. Dlaczego?

2 odpowiedzi

0 głosów
odpowiedź 19 sierpnia 2019 przez k222 Nałogowiec (30,150 p.)

U mnie wyświetla poprawnie liczbę 987. Masz tu cały kod, porównaj ze swoim:

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    
    int licznik = 2;
    int liczba[3];
    int obliczenia = 0;
    liczba[0] = 7;
    liczba[1] = 8;
    liczba[2] = 9;
 
    for(int k = licznik; k>=0; k--) {
        obliczenia += pow(10, k)*liczba[k];
    }
    
    cout<<obliczenia<<endl;


    return 0;
}

 

0 głosów
odpowiedź 19 sierpnia 2019 przez tangarr Mędrzec (155,180 p.)
Funkcja pow zwraca double. Możliwe, że u ciebie pow(10,0) zwraca wartość  0,99999999999. Niejawna konwersja do inta powoduje obcięcie części dziesiętnej.
Masz dwie opcje:
1. Wykonuj obliczenia na double
2. Zaokrąglaj wyniki przed konwersją

Podobne pytania

0 głosów
2 odpowiedzi 438 wizyt
pytanie zadane 16 marca 2020 w C i C++ przez Berniak Początkujący (260 p.)
0 głosów
2 odpowiedzi 370 wizyt
pytanie zadane 27 czerwca 2019 w SPOJ przez magda_19 Gaduła (3,080 p.)
0 głosów
2 odpowiedzi 2,753 wizyt
pytanie zadane 25 kwietnia 2018 w C i C++ przez Marcin Reguła Początkujący (450 p.)

93,483 zapytań

142,417 odpowiedzi

322,763 komentarzy

62,895 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...