Przechowywanie w C liczb powyżej 16 znaków

0

Cześć,
proszę o pomoc jakiego typu zmiennej użyć aby przechować w pamięci liczby zawierające 16 i więcej znaków.
Mam do zrobienie wypisanie kolejnych 100 wyrazów ciągu Fibonacciego, kod wydaje i się, że jest poprawny, ale od 78 wyrazu wyświetla błędne wartości.
Jak to naprawić?

#include <stdio.h>

int main()
{
    double TablFibo1a[100]={1,1,0,};
    int i=1;
    int j=0;

    while (i<=100)
    {
        if (j>1) {TablFibo1a[j]=TablFibo1a[j-1]+TablFibo1a[j-2];};
        printf("wyraz_%d: %.0f\n",i, TablFibo1a[j]);
        i=i+1;
        j=j+1;
    }

    return 0;
}

0

Unsigned int lub unsigned long. Long powinien wystarczyć aż nadto, jeśli dobrze pamiętam jego zakres.
Typy są bez znaku, bo w Fibonaccim nie potrzebujesz wartości ujemnych, więc nie ma sensu tracić możliwości reprezentacji większej liczby.

Edit: A wystarczyłoby zajrzeć na 100. wyraz i bym wiedział, że niedoceniłem...
Poniżej masz już cokolwiek sensowniejszą odpowiedź :)

3

Nie potrzebujesz do tego tablicy. Jeśli chodzi o same wartości, to nie widzę powodu aby używać typów zmiennoprzecinkowych do obliczeń całkowitych.

Przy czym 32-bitowy typ bez znaku jest w stanie opisać pierwsze 47 wyrazów (albo jakoś tak), a 64-bitowy - 92. Wobec czego pewnie będziesz musiał użyć jakiejś biblioteki do big numów, albo zaimplementować coś uproszczonego samodzielnie. Albo liczyć na to, że twoja implementacja oferuje 128-bitowe typy całkowite.

0

Wyżej wspomniana GMP posiada nawet wbudowanego Fibonacciego

1 użytkowników online, w tym zalogowanych: 0, gości: 1