fibonacci code



  • hallo,

    Ich benutze gcc unter Linux. Der nachfolgende code soll mir die fibonacci_nummern von 0-100 anzeigen. Bis zur 46. Ausgabe klappt das auch, danach werden allerdings auch negative Nummern angezeigt.Nun habe ich es auch schon mit long etc. versucht.Leider ohne Ergebnis.
    Hat jemand vielleicht eine Idee oder einen Tipp? Im voraus schon herzlichen Dank.

    #include <stdio.h>
    
    int main() {
    
    	int fib[100];
    
    	int i;
    
    	fib[0] = 0;
    	fib[1] = 1;
    
    	for(i = 2; i < 100; i++)
    		fib[i] = fib[i-1] + fib[i-2];
    
    	for (i = 0; i < 100; i++)
    		printf("%3d   %6d\n", i, fib[i]);
    
    	return 0;
    }
    

    Ausgabe (Ausschnitt)
    .
    .
    .
    (43) 433494437
    (44) 701408733
    (45) 1134903170
    (46) 1836311903
    (47) -1323752223
    (48) 512559680
    (49) -811192543
    .
    .
    .



  • Der Wertebereich des Datentyps läuft an der Stelle über. Du kannst es ja mal mit dem Typ long long probieren. Dein grundsätzliches Problem löst das natürlich nicht.



  • Überlege mal (oder recherchiere) welches die größte Zahl ist, die ein int auf deinem System darstellen kann. Dann überlege wie vorzeichenbehafete Zahlen auf deinem System realisiert sind.

    edit: zu langsam...



  • Danke für die schnellen Antworten

    hier meine Systemausgabewerte bezüglich int.

    int-Wert mindestens : -2147483648
    int-Wert maximal : 2147483647
    unsigned int max. : 4294967295

    Tim.Könntest du mir bitte das mit den vorzeichenbehafete Zahlen auf meinem System etwas näher erklären?Wie kann ich das feststellen?

    gruß



  • ich könnte mir gut vorstellen, dass es in C++ eine klasse gibt, die beliebig große integer darstellen kann, schließlich gibt es die ja auch in Python oder Java, bei reinem c bin ich mir da nicht so sicher. (klassen lassen sich wie normale Datentypen verwenden, wenn sie richtig implementiert sind, allerdings bin ich mir da nicht sicher, wie sin in verwendung mit printf funktionieren, vermutlich garnicht, und man müsste cout verwenden)

    such mal nach biginteger

    eine andere möglichkeit wäre auf long double umzusteigen, dabei gehen zwar bei großen Zahlen irgendwann die kleinen stellen verlohren, aber dafür stimmen die Zahlen noch ungefähr überein.



  • leon_2 schrieb:

    Tim.Könntest du mir bitte das mit den vorzeichenbehafete Zahlen auf meinem System etwas näher erklären?Wie kann ich das feststellen?

    gruß

    Wenn ich es mir recht überlege, hat das mit deinem Problem eher wenig zu tun. Wichtige Lektüre ist es trotzdem. Auf den meisten Systemen wird die Zweierkomplement Darstellung umgesetzt. Es gibt aber auch "Exoten" wie z.B. Sign-and-Magnitude mit einem "expliziten" Vorzeichenbit.

    @ Krux:
    In C würde man zur GMP greifen.



  • Danke euch beiden Krux und Tim,

    habe mich jetzt als leon_3 hier im Forum registriert. Als leon_2 habe ich mich bei der email vertippt und das ging nicht mehr rückgängig zu machen.leider.

    Also,das Problem scheint doch eher etwas tiefer zu liegen. Der Lehrer hat damit uns wohl zum nachforschen anregen wollen. Wir wollen ja lernen und ich werde auf jedem Fall eure Ratschläge befolgen. Man wird nicht dümmer dadurch...

    Herzlichen Dank und alles Gute



  • so einfach kann es sein:

    %Lf (long double) benutzen...

    und tshüß


Anmelden zum Antworten