Pytanie dotyczące kodu w C++

Witam.

Mam takie pytanko (jestem całkowicie początkujący w C++):

dlaczego np. po podstawieniu pod “ile” 5 i dodaniu 5 zer wyskakuje “dziwny” wynik? (powyżej 0 działa OK) również gdy “w” zmienię typ na int obojętnie jakie liczby wpisze (np. 5+6+4+8) też wynik nie jest taki, jak powinien…

proszę o odpowiedź i wyprowadzenie mnie może z głupiego błędu

kod:

#include 

int main ()

{

          std::cout << "Witam w systemie dodawania \n";


          double ile;

          double dod;

          double w;

          double i;


          std::cout << "Ile liczb chcesz dodac? \n";

          std::cin >> ile;


          for(i=0;ile>i;i=i+1)

          {

                   std::cin >> dod;

                   w=w+dod;


          }


          std::cout << "Wynik to: ";

          std::cout << w << "\n";


system("pause");


}

http://www.forum.ithelpdesk.pl

Tu masz forum w całości poświęcone c++. Myślę, że tam ktoś chetnie Ci udzieli odpowiedzi :slight_smile:

  1. Ta wg Ciebie “dziwna” wartość to 9.9*10^(-315) jest bardzo bliska zera.

  2. Zauważ, że zadeklarowałeś zmienną “w” jako double i nie nadałeś jej żadnej wartości. Najwyraźniej z tego powodu c++ traktuje zmienne nie zainicjowane typu double jako taką “dziwną” wartość. Aby to udowodnić możesz bezpośrednio po zadeklarowaniu zmiennej “w” napisać

    std::cin >> w;

i zobacz co Ci wywali ;). To samo jest z typem float.

Jaki z tego morał? Ano taki, abyś nie polegał na domyślnych wartościach, tylko sam podczas inicjalizacji zmiennej nadał jej wartość.

Jak będziesz miał problemy to pisz, pozdrawiam!

Deklaruj wartość początkową zmiennej - nikt tego za Ciebie nie zrobi:

double w = 0;

Suma kilku zer powinna wynieść zero - zmienne float i double potrafią przedstawić zero w postaci zera a nie przybliżenia.