Witam, otóż kilka dni temu zacząłem naukę C++ wraz z serią video poradników pana Mirosława. Dotarłem do odcinka piątego i gdy pan Mirosław opisał na czym ma polegać ostatni przykład w tym odcinku, postanowiłem, że spróbuje sam go zrobić. Po uzupełnieniu kodu o kilka rzeczy, o których pan Mirosław mówił podczas wyjaśniania danego zadania i kilku testach zauważyłem dziwną właściwość mojego kodu. Otóż, gdy chciałem wyznaczyć 50 liczb Fibonacciego, ostatnia 50 liczba wyświetlała się jako dosyć długi zapis typu long double, jednak z minusem, a nie jak można by się spodziewać plusem. Co więcej problem znikał (50 wyświetlało się jako poprawny wynik), gdy tylko zmieniałem długość ciągu o jakąkolwiek wartość, zarówno w górę jak i w dół. Całą sytuację zbadałem nieco dogłębniej i jak się okazało problem dotyczy wszystkich liczb w których na końcu jest jedno zero, a przed nim liczba nieparzysta, choć nie wszystkich (np. 2210, ale już 2010 wyświetla się źle). Czy może mi ktoś wytłumaczyć co jest nie tak z tym kodem? Z góry dzięki.
#include <iostream>
#include <iomanip>
using namespace std;
int liczba;
int main()
{
cout << "Podaj do ktorej liczby chcesz wyznaczyc ciag Fibonacciego: " << endl;
cin >> liczba;
//Ustalanie wartości dwóch pierwszych liczb w ciągu
long double fib[liczba-1];
fib[0] = 1;
fib[1] = 1;
//Liczenie kolejnych liczb ciągu
for(int i=2; i<liczba; i++)
{
fib[i] = fib[i-1] + fib[i-2];
}
cout << setprecision(liczba);
//Wyświetlanie kolejnych liczb ciągu
for(int i=0; i<liczba; i++)
{
cout << endl << i+1 << ". " << fib[i];
}
//Wyświetlanie konkretnej liczby ciągu
//cout << liczba << ". " << fib[liczba-1];
//Obliczanie przybliżenia złotej proporcji
//cout << "zlota liczba " << fib[liczba-1]/fib[liczba-2];
return 0;
}