Leonardo Fibonacci beschrieb im Jahr 1202 das Wachstum einer Kaninchenpopulation und fand dazu die heute nach ihm benannte Zahlenfolge der Fibonacci-Zahlen. Geschichtswissenschaftler wiesen allerdings auf die frühe Erwähnung dieser Folge in Sanskrit-Texten um ca. 450 vor Chr. hin.
Dann wurde entdeckt, daß diese Folge in der gesamten Natur vorkommt: Die Anzahl der Vorfahren männlicher Honigbienen (Drohnen), die Zahl der Schuppen in den einzelnen Schuppenringen einer Ananas, die Samenlamellen der Spiralringe von Fichtenzapfen, Samenstände von Sonnenblumen oder die Blütenblatt-Anzahl bestimmter Blumen (etwa Astern) folgt dieser Reihe.
Später erweiterten Mathematiker die Fibonacci-Reihe auch auf den negativen Zahlenbereich, was u.a. zum Zeckendorf-Theorem führte. Dieses besagt, daß jede beliebige ganze Zahl aus Folgen nicht-benachbarter negativ-indexierter Fibonacci-Zahlen zusammengesetzt werden kann. Ein daraus abgeleiteter Binärstellencode kann z.B. keine nebeneinander auftretenden 1-Werte aufweisen, was bei bestimmten Anwendungen eine zuverlässige Fehlererkennung ermöglicht. Weitere Anwendungen ergaben sich bei der Organisation von Datenbanken in Form der sog. Fibonacci-Bäume. Diese sind heutzutage allerdings eher von theoretischem Wert (Laufzeitanalyse).
WindowTitle upper$(\
" Allg. Fibonacci-Zahlen: Gültigkeitsbereich verschiedener Formeln (ua.: Moivre-Binet) testen")
'(CL) CopyLeft 2015-08 in XProfan11.2a by P.Specht, Wien (Austria), OHNE JEDWEDE GEWÄHR!
'Info-Basis: https://de.wikipedia.org/wiki/Fibonacci-Folge
Window 0,0-%maxx,%maxy-50:font 2:Set("decimals",0):declare n&,vz&,sg!
AppendMenubar 100,"N "+"_______ Tab.1 "+"___________________________ Tab.2 "+\
"__________________________________ Fib(%g) "+"____________________________ Fib(#) "+\
"_____________________ fibz_MoivreBinet() "+"_____________ Fehler "+\
"________________________________ N "
var f$="00,0,01,1,02,1,03,2,04,3,05,5,06,8,07,13,08,21,09,34,10,55,11,89,12,144,13,233,"+\
"14,377,15,610,16,987,17,1597,18,2584,19,4181,20,6765,21,10946,22,17711,23,28657,"+\
"24,46368,25,75025,26,121393,27,196418,28,317811,29,514229,30,832040,31,1346269,"+\
"32,2178309,33,3524578,34,5702887,35,9227465,36,14930352,37,24157817,38,39088169,"+\
"39,63245986,40,102334155,41,165580141,42,267914296,43,433494437,44,701408733,"+\
"45,1134903170,46,1836311903,47,2971215073,48,4807526976,49,7778742049,50,12586269025"
var fi$="0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,"+\
"28657,46368,75025,121393,196418,317811,514229,832040,1346269,2178309,3524578,5702887,9227465,"+\
"14930352,24157817,39088169,63245986,102334155,165580141,267914296,433494437,701408733,"+\
"1134903170,1836311903,2971215073,4807526976,7778742049,12586269025,20365011074,32951280099,"+\
"53316291173,86267571272,139583862445,225851433717,365435296162,591286729879,956722026041,"+\
"1548008755920,2504730781961,4052739537881,6557470319842,10610209857723,17167680177565,"+\
"27777890035288,44945570212853,72723460248141,117669030460994,190392490709135,308061521170129,"+\
"498454011879264,806515533049393,1304969544928657,2111485077978050,3416454622906707,"+\
"5527939700884757,8944394323791464"
whileloop -80,80
n&=&Loop:sg!=1:vz&=(n&>0)-(n&<0):case vz&=-1:vz&=if(int(0.5*n&)=(0.5*n&),-1,1)
print if(n&<0,""," ");if(abs(n&)<1000," ","");if(abs(n&)<100," ","");if(abs(n&)<10," ","");n&,
print tab(10);if(vz&<0,""," ");format$("%g",vz&*val(substr$(f$,abs(n&)*2+2,","))),
print tab(32);format$("%g",fib(n&)),
print tab(54);format$(" ################0;-################0; 0",vz&*val(substr$(fi$,abs(n&)+1,","))),
print tab(76);format$(" ################0;-################0; 0",fib(n&)),
print tab(98);format$(" ################0;-################0; 0",fibz_MoivreBinet(n&)),
font 0
print tab(120);format$("+################0;-################0; 0",fibz_MoivreBinet(n&)-vz&*val(substr$(fi$,abs(n&)+1,","))),
font 2
print tab(142);if(n&<0,""," ");if(abs(n&)<1000," ","");if(abs(n&)<100," ","");if(abs(n&)<10," ","");n&
if %csrlin>49:print " [Taste]";:waitinput:cls:endif
endwhile
waitinput
END
Proc fib :parameters n&:declare i&,vz!,sg!,f0!,f1!,f2!
sg!=1:vz!=(n&>0)-(n&<0):n&=abs(n&):f0!=1
case vz&=-1:sg!=if(int(0.5*n&)=(0.5*n&),-1,1)
while i&<n&:f2!=f1!+f0!:f0!=f1!:f1!=f2!:inc i&:endwhile
return sg!*f2!
endproc
Proc fibz_MoivreBinet :parameters n&:case n&=0:return 0
var vz!=(n&>0)-(n&<0):n&=abs(n&)
var sg!=1:case vz&=-1:sg!=if(int(0.5*n&)=(0.5*n&),-1,1)
var phi!=(1+sqrt(5))/2:var chi!=phi!-1
return sg!*(phi!^n& + chi!^n&)/sqrt(5)
endproc
|