Deutsch
Quelltexte/ Codesnippets

Fibonacci-Zahlen und deren Anwendungen

 

p.specht

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

 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
19.05.2021  
 




p.specht

Fibonacci mal anders
================
Da gibt es eine verblüffende Formel aus lauter irrationalen Zahlen (u.a. Goldener Schnitt und sein Kehrwert), mit der man die ganzzahligen Ergebnisse der Fibonacci-Folge (0,1,1,2,3,5,8,13,...) herausbekommt, ohne jedesmal bei 0 anzufangen. In Zeiten moderner Computer spielt es natürlich kaum eine Rolle, den Apparat die Elemente der Folge bis z.B. 1470 aufaddieren zu lasssen. Um die Genauigkeitsgrenzen des XProfan-Arithmetikpaketes auszutesten, ist die Formel aber gerade richtig!
WindowTitle " N. Fibonacci-Zahl per Moivre-Binet-Näherung berechnen (N=0..1474)"
'https://de.wikipedia.org/wiki/Fibonacci-Folge#N%C3%A4herungsformel_f%C3%BCr_gro%C3%9Fe_Zahlen
WindowStyle 24:CLS:Font 2
declare n!

proc fib$ :parameters n!

    case n!<0:return "0"
    case n!>1474:return " ... > 5e+307 *** OVERFLOW ERROR *** "
    return format$("######################0",(0.5+0.5*Sqrt(5))^n!/Sqrt(5))
    'klappt nur, weil format$ rundet, also 0.5 dazuaddiert!

endproc

luuup:
locate 4,1
print "\n Die wievielte Fibonacci-Zahl berechnen? N = ";:input n!
CLS
print "\n Die ";int(n!);".te",tab(14);"Fibonacci-Zahl ist",fib$(n!)
print "  Check durch Aufaddieren mit vorangehender Zahl:",fibadd$(n!)
Goto "luuup"

proc fibadd$ :parameters n!

    declare fib!,last!,sum!
    last!=1

    Whileloop n!

        sum!=fib!+last!
        fib!=last!
        last!=sum!

    Endwhile

    return format$("######################0",fib!)

endproc

 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
30.05.2021  
 



Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

1.760 Betrachtungen

Unbenanntvor 0 min.
p.specht21.11.2021
R.Schneider20.11.2021
Uwe Lang20.11.2021
Manfred Barei19.11.2021
Mehr...

Themeninformationen

Dieses Thema hat 1 Teilnehmer:

p.specht (2x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie