pamiętnik programisty

06 cze, 2009

Z C++ zagadka nr 2

Zamieszczony przez: pejotr w: C++|Programowanie

Zagadka nr 2 bardzo blisko związana z zawiłościami języka programowania c++, choć okazuje się że dotyczy także innych, w tym np. Javy. Kod wydaje się banalnie prosty. Jednak jak mówi „stare chińskie przysłowie”  – „Diabeł tkwi w szczegółach”.

Czego można by się spodziewać po wykonaniu takiego kodu ?

#include <iostream>

int main()
{
    for(double i = 0; i != 1; i+= 0.1)
    {
        std::cout << "Obrot petli i = " << i << std::endl;
    }
}

Odpowiedź na to pytania wymaga trochę więcej niż tylko znajomości składni języka. Na pierwszy rzut oka wydawać się może że pętla dokona 10 obrotów a następnie program się skończy. Gdyby to był 1 kwietnia wiele osób uznało by za żart stwierdzenie że pętla będzie działać w nieskończoność, choć tak naprawdę jest !! Program nie zauważy że dobił do 1 i powinien przestać działać. Co więcej, na ekran zostanie wypisana liczba 1 a mimo to działanie nie zostanie przerwane. Wyjaśnienia tego przypadku, trzeba szukać w komputerowej reprezentacji liczby 0.1 :)

Tagi:

2 odpowiedzi na "Z C++ zagadka nr 2"

1 | Jarek

8. Czerwiec 2009 o 13:48

Avatar

Co gorsza, kompilator nie zglosi nawet ostrzezenia ! Choc oczywiscie nikt naprawde takiego bledu nie popelni, prawda?

2 | ornsh

7. Październik 2009 o 01:19

Avatar

czasem warto rozwiazac tescik na targach pracy ;]

Formularz komentarza

*

O mnie:

pejotrWitam, nazywam się Piotr Doniec, w internecie występuję pod nickami 'pejotr' oraz 'doniczek'. Obecnie jestem studentem 3 roku informatyki na Politechnice Warszawskiej na wydziale Elektroniki i Technik Informacyjnych.

Kategorie