Z C++ zagadka nr 2
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
| Drukuj artykuł | Ten wpis został napisany przez pejotr na 06-06-2009 o 12:49, i jest w kategorii C++, Programowanie. Podążaj za odpowiedziami do tego wpisu przez RSS 2.0. Możesz napisać komentarz, lub trackbacka z Twojej własnej strony. |
około 1 lat temu
Co gorsza, kompilator nie zglosi nawet ostrzezenia ! Choc oczywiscie nikt naprawde takiego bledu nie popelni, prawda?
około 9 miesiące temu
czasem warto rozwiazac tescik na targach pracy ;]