Python :: Aufgabe #179

3 Lösungen Lösungen öffentlich

Fibonacci und die Zahl 89

Anfänger - Python von hollst - 14.05.2018 um 13:09 Uhr
Wenn man die Glieder der Fibonacci-Folge

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233 ...

entsprechend nachfolgendem Schema anordnet

0.0
0.01
0.001
0.0002
0.00003
0.000005
0.0000008
0.00000013
0.000000021
0.0000000034
0.00000000055
0.000000000089
0.0000000000144
.
.

und die Glieder aufaddiert, ergibt sich

----------------
0.01123595505...

Diese rationale Zahl beginnt mit den gleichen Nachkommadigits wie 1/89:

1/89 = 0.0112359550561798... (16 Nachkommastellen (Double))
= 0.01123595505617977528089887640449... (Taschenrechner (Abb. 1), 32 Nachkommastellen)

Berücksichtigt man bei obiger Addition quasi alle Summanden, so wird vermutet, dass sich in der Tat 1/89 exakt ergibt, unglaublich, wenn wahr, oder?

Diese Eigenschaft der Fibonacci-Folge wurde erst 1994 entdeckt (von einem Herrn Cody Birsner, damals Student in Oklahoma). Also, auch heute
ist noch genügend Platz für grandiose und phantastische Entdeckungen in der Zahlentheorie.

Man zeige mittels Programmierung, dass die Vermutung (die mittlerweile bewiesen ist) selbst bis zur Taschenrechnergenauigkeit mit 32 Nachkommastellen nicht widerlegt wird.

Lösungen:

vote_ok
von jigga (3820 Punkte) - 15.05.2018 um 10:32 Uhr
Quellcode ausblenden Python-Code
from decimal import *

getcontext().prec = 32

k, liste = 0, [0,1]

for i in range(2,40):
	liste.append(liste[i-2]+liste[i-1])

for j in range(len(liste)):
	k += round(Decimal(10**(-(j+1)))*liste[j],j+1)

print("Fibo:",round(k,32))
print("1/89:",round(1/Decimal(89),32))
vote_ok
von ZRX88 (2640 Punkte) - 25.07.2019 um 19:17 Uhr
Quellcode ausblenden Python-Code
import math
from decimal import *

getcontext().prec = 32
def fibunaci_numbers(number):
    x = [0,1,1]
    i = 3
    while i < number:
        x.append(x[-1]+x[-2])
        i = i +1
    return x  


def run_sequence(number):
    x = Decimal(0)
    for i, fib in enumerate(fibunaci_numbers(number)):
        x = x + Decimal(fib*math.pow(0.1,i+1))
    return x

print(run_sequence(150))
print(Decimal(1.0)/Decimal(89))
vote_ok
von Benji (40 Punkte) - 15.08.2019 um 11:33 Uhr
Quellcode ausblenden Python-Code
values = []
def f(n): #fibonacci f(n-1)
    if n == 0:
        values.append(0)
    elif n < 3:
        values.append(1)
    else:
        values.append(values[n-1]+values[n-2])

summ = 0
for i in range(0,100): 
    f(i)
    summ += values[i]*10**(100-i) #Zur Umgehung der Rundungsfehler. Die Potenz 100 ist beliebig.
#print(summ)
print('0,0{}'.format(summ))