Wenn du nur 61 Durchläufe machst (for i in range(0,60)), dann kann das Programm eben nur 60 BINÄRE Nachkommestellen herausfinden. Es benötigt mehr als 3 binäre Nachkommastellen, um eine Dezimale Nachkommastelle herauszufinden, denn log(10)/log(2) = 3.321928...
Hier ein paar Lösungsvorschläge:
- Du Lässt nicht von 0 bis 60 laufen, sondern formal korrekt von 1 bis ceil(50 * log(10) / log(2)), denn du willst 50 Stellen in Dezimal.
- Du verwendest keine normale binäre Suche, die den Suchraum pro Schritt nur halbiert, sondern zehntelt. Dann erhälst du pro Iteration auch eine dezimale Stelle hinzu und keine binäre.
- Du definierst nicht eine konstante Anzahl von Schleifendurchläufen (wie 60), sondern du lässt solange laufen, bis sich die Zahl nicht mehr ändert. Dabei musst du natürlich ein Dateiformat nehmen, dass Dezimal mindestens 50 Nachkommastellen ausdrücken kann aber nicht unendlich.
Schau mal wie viele Stellen bei deiner Lösung korrekt waren. Es sind 16 Nachkommestallen. Da du zusätzlich angefangen hast zwischen 0 und pi (also 2 Vorkommastellen mussten auch korrekt approximiert werden), hast du 18 Stellen korrekt berechnet.
Wie viele Stellen hätte dein Algorithmus korrekt berechnen müssen? 61*log(2)/log(10) = 18.3628297355 ...
Liebe Grüße
cunni
Punkte: 35