Autor |
Beitrag |
Fiete
Beiträge: 611
Erhaltene Danke: 347
W7
Delphi 6 pro
|
Verfasst: Mo 24.07.23 16:31
Moin,
das Programm berechnet die N-te Fibonaccizahl, N=1 bis 999999.
Die Langzahlunit enthält die folgenden Methoden:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| type TFeld=Array of Int64;
procedure LangInt(var A:TFeld;B:Integer); function LangKleiner(A,B:TFeld):Boolean; function LangGleich(A,B:TFeld):Boolean; procedure LangRead(Zahl:String;var Z:TFeld); procedure LangIntToStr(Zahl:TFeld;var Erg:String); procedure LangAdd(var S:TFeld;A,B:TFeld); procedure LangSub(var D:TFeld;A,B:TFeld); procedure LangMul(var E:TFeld;A,B:TFeld); procedure LangDivision(var E,R:TFeld;A,B:TFeld); procedure LangAusgabe(LMemo:TMemo;S:TFeld); procedure LangSqrt(var XA:TFeld;A:TFeld); procedure LangPotenz(var E:TFeld;B:TFeld;Expo:Cardinal); |
Viel Spaß beim Testen!
Gruß Fiete
Einloggen, um Attachments anzusehen!
_________________ Fietes Gesetz: use your brain (THINK)
Für diesen Beitrag haben gedankt: Andreas_500, jaenicke, mandras, Mathematiker, Narses
|
|
jaenicke
Beiträge: 19285
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 14.08.23 01:22
Das funktioniert sehr gut.
Wie wäre es, wenn du die Langzahlarithmetik als "echten" Zahlentyp umsetzt? (Quelltext siehe Anhang)
Dann sieht das nämlich statt so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var A1, A2, Summe: TFeld; ... LangInt(A1,0);LangInt(A2,1); if N>1 then LangInt(Summe,1) else LangInt(Summe,0); for K:=3 to N do begin A1:=A2;A2:=Summe; LangAdd(Summe,A1,A2); end; |
So aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| var A1, A2, Summe: TVeryLongInt; ... A1 := 0; A2 := 1; if N>1 then Summe := 1 else Summe := 0; for K:=3 to N do begin A1 := A2; A2 := Summe; Summe := A1 + A2; end; |
Einloggen, um Attachments anzusehen!
Für diesen Beitrag haben gedankt: Fiete
|
|
Fiete
Beiträge: 611
Erhaltene Danke: 347
W7
Delphi 6 pro
|
Verfasst: Mo 14.08.23 17:11
Moin jaenicke,
habe versucht den Quelltext mit D6pro zu compilieren, leider fehlgeschlagen.
Meldung vom Compiler:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| [Fehler] LangZahlRechnenInt64_2.pas(11): 'END' erwartet, aber 'CLASS' gefunden [Fehler] LangZahlRechnenInt64_2.pas(11): ';' erwartet, aber '(' gefunden [Fehler] LangZahlRechnenInt64_2.pas(11): ';' erwartet, aber ')' gefunden [Fehler] LangZahlRechnenInt64_2.pas(11): '=' erwartet, aber ';' gefunden [Fehler] LangZahlRechnenInt64_2.pas(12): PROCEDURE oder FUNCTION erwartet [Fehler] LangZahlRechnenInt64_2.pas(30): 'IMPLEMENTATION' erwartet, aber ';' gefunden [Fehler] LangZahlRechnenInt64_2.pas(42): ';' erwartet, aber 'IMPLEMENTATION' gefunden [Fataler Fehler] FiboLang.pas(7): Verwendete Unit 'LangZahlRechnenInt64_2.pas' kann nicht compiliert werden |
Gruß Fiete
_________________ Fietes Gesetz: use your brain (THINK)
|
|
jaenicke
Beiträge: 19285
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 14.08.23 18:40
Stimmt, das geht erst ab Delphi 2006. Ich habe nicht darüber nachgedacht und nicht nachgeschaut, welche Version du verwendest.
Mit der kostenlosen Community Edition funktioniert es aber.
|
|
Fiete
Beiträge: 611
Erhaltene Danke: 347
W7
Delphi 6 pro
|
Verfasst: Di 15.08.23 15:08
Moin Sebastian,
in meinem Archiv habe ich noch eine Formel zur Berechnung der N-ten Fibonacci-Zahl gefunden.
der Delphiquelltext dazu:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| var Erg,W5,Nenner:Extended; begin N:=Eingabe.Value; inc(N); W5:=sqrt(5);Nenner:=W5*Power(2,N); Erg:=(power(1+W5,N)-power(1-W5,N))/Nenner; Ausgabe.Items.Add(Format('%0.0f',[Erg])); end; |
Mir fehlt jetzt die Kenntnis wie ich die Zeilen auf beliebig große RealZahlen erweitere.
Vielleicht hast Du eine Idee.
Gruß Fiete
Einloggen, um Attachments anzusehen!
_________________ Fietes Gesetz: use your brain (THINK)
|
|
jaenicke
Beiträge: 19285
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 16.08.23 07:27
Für die Formel von Moivre-Binet wirst du analog zu deinen Langzahlen eine Berechnungsmöglichkeit mit der entsprechenden Präzision benötigen. Das gibt es alles fertig, z.B. hier:
github.com/rvelthuis/DelphiBigNumbers
Allerdings funktionieren diese Bibliotheken wohl alle nicht mit Delphi 6. Diese funktioniert z.B. ab XE2.
Für diesen Beitrag haben gedankt: Fiete
|
|
|