Veröffentlicht 27. Januar 200916 j Hi ich versuche mich jetzt schon seit Stunden aber ich schaffe es nicht. Die Aufgabe: Die 200ste Fibonacci Zahl (10 Stellen) herrausfinden. Mein Programm liefert mir aber ab der 185zigsten nur noch 1.#INF. Wie umgehe ich das Zahlenlimit von float? Liegt es überhaupt daran? Hier mein Code: #include <iostream> using namespace std; int main (void) { float a = 2; float b = 1; float old_a = 0; int counter = 0; while (counter < 200) { cout << "Counter: " << counter+1 << "\t"; cout.precision(10); cout << a/b << endl; old_a = a; a = a + b; b = old_a; counter++; } return(0); }
27. Januar 200916 j Die 200. Fibonacci-Zahl ist ungefähr 2.8 * 10^41. Der Wertebereich eines 32-Bit-float geht nur bis 3.4 * 10^38. Außerdem hat so ein float ohnehin nur 7 signifikante Stellen, so dass du damit gar nicht 10 Stellen Genauigkeit erreichen kannst. Versuch's mal mit double.
27. Januar 200916 j An double habe ich garnicht gedacht, dachte das wäre eine Datentyp für Festkomma Zahlen und nicht für Gleitkommazahlen :-) Jetzt klappt alles super!!!!!! Vielen Dank!!
27. Januar 200916 j warum überhaupt float? Frag ich mich auch. Mit Double gehts sowohl rekursiv, als auch iterativ: double fibIter(int num) { double result=1; double a=1; double b=1; for(int i=3; i<=num; ++i) { result=a+b; a=b; b=result; } return result; } double fibRec(int num) { if(num<=2) return 1; return fibRec(num-1) + fibRec(num-2); } Bearbeitet 27. Januar 200916 j von TDM
27. Januar 200916 j Frag ich mich auch. Mit Integer gehts sowohl rekursiv, als auch iterativ:Da brauchst du aber schon einen 128-Bit-Integer, wenn du die 200. Fibonacci-Zahl unterbringen willst.
27. Januar 200916 j Da brauchst du aber schon einen 128-Bit-Integer, wenn du die 200. Fibonacci-Zahl unterbringen willst. Ja, hatte ich mir auch grad überlegt, siehe Edit - double ist schon besser.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.