C - nochmal long Datentyp
-
Hallo,
wenn ich die Funktion für die n-te Fibonaccizahl habe
long fib(long n)
{
long fN = 1, fNminus1 = 0, fNminus2;
for(long i=0; i<n; i++) {
fNminus2 = fNminus1;
fNminus1 = fN;
fN = fNminus1 + fNminus2;
}
return fN;
}wenn ich hier statt long überall unsigned long long schreiben würde, könnte ich dann größere fib zahlen abfragen?
Danke,
James
-
@JamesNguyen denkst du über die Antworten auch mal nach?
-
entschuldige nein
also ich habe das jetzt mal implementiert so wie ich mir das vorgestellt habe
#include <stdio.h>
int main ( void )
{
auto unsigned long long fN = 1ull , fNminus1 = 0ull , fNminus2 ;int i ; for ( i = 0 ; i < 90 ; i ++ ) { fNminus2 = fNminus1 ; fNminus1 = fN ; fN = fNminus2 - fNminus1 ; } printf ( "%llu\n" , fN ) ; return 0 ;
}
0.-te und 1.-te Fibonacci-zahl sind bei mir 1
jetzt stimmt bei mir die 90. Fibonacci-Zahl
4660046610375530309
aber bei der 91 müsste eig
7540113804746346429
rauskommen, bei mir kommt aber
10906630268963205187
wenn man sich die nächsten Fibonacci zahlen bis zur unsigned long long grenze aufschreibt wäre eig noch platz.
bis zur 93. ?4660046610375530309 90.
7540113804746346429 91.
12200160415122000000 92.
18446744073709551615 Grenze von unsigned long long
19740274219868000000 93.
-
@JamesNguyen sagte in C - nochmal long Datentyp:
4660046610375530309 90.
7540113804746346429 91.
12200160415122000000 92.fällt dir da nichts auf? Verdächtig viele Nullen sind da in der 92, bei mit ist 9+9=8 merke 1, wenn ich von Hand mal die letzte Ziffer addiere...
Zum Code:
fN = fNminus2 - fNminus1 ;
Warum subtrahierst du überhaupt irgendwas?
Edit: ansonsten wundere ich mich aber, denn deine Zahlen bis dorthin scheinen ja korrekt zu sein. 12200160415121876738 sollte rauskommen. Im Endeffekt musst du aber sowieso eine bigint-Bibliothek nutzen, um weiterzukommen.
Und dein Compiler gibt für ULONG_MAX 18446744073709551615 zurück? Was gibt denn dein Fib(93) - 12200160415121876738ull aus? Kommt da 0 raus?
-
ah ok mit plus klappt es
das bigint benutze ich glaube ich nicht, denke ich soll mich auf primitive datentypen beschränken.
Danke!