Autor Beitrag
OneOfTen
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 19.04.05 14:29 
Große Zahlen sind immer faszinierend: :wink:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
Function TForm1.erzeugeZahl(Stellen: Integer):String;
Var n: Integer;
Begin // erstellen einer Zahl mit n Stellen
  Result := '';
  For n := 1 To Stellen Do
    Result := Result + IntToStr(Random(10));
End;


Mit dieser Funktion werden beide addiert:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
Function Summe(Zahl1,Zahl2: String): String;
Var n: Integer;
    Uebertrag: Byte;
    len: Integer;
    zw: Integer;
Begin
  If     Length(Zahl1) < Length(Zahl2)
  Then Begin // Tausche Zahlen, so dass Zahl 1 länger ist.
         Result := Zahl1;
         Zahl1 := Zahl2;
         Zahl2 := Result;
       End;

  len := Length(Zahl1);  // len >= l2

  For n := 1 To len-Length(Zahl2) Do
    Zahl2 := '0'+Zahl2;  // Zahlen ergänzen, so dass beide Zahlen gleich viele Stellen haben

  // l1 = l2 = len

  Result := '';    // Ergebnis initialisieren
  Uebertrag := 0;  // zu Beginn keinen Uebtrag
  For n := 1 To len Do
    Begin
      zw := Uebertrag + StrToInt(Zahl1[len-n+1])+StrToInt(Zahl2[len-n+1]);

      If   zw > 9   // wenn Zwischensumme >9 dann Übertrag
      Then Uebertrag := 1
      Else Uebertrag := 0//ansonsten nicht

      Result := IntToStr(zw Mod 10) + Result;  //Divisionsrest der Zwischensumme an die Zahl heranfügen
    End;

  If   Uebertrag > 0  // Wenn am Ende noch ein Übertrag bleibt
  Then Result := IntToStr(Uebertrag)+Result;
End;


Hier werden öfter Funktionen optimiert, mit Assembler, besseren Algorithmen etc..

Kann man diese Funktion zur Addition von hohen Zahlen optimieren?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 19.04.05 15:46 
Also das dürfte seeehhr lange dauern bei richtig großen Zahlen würde ich sagen. Jedesmal in einem String zu suchen....

Da wärs wohl noch schneller ein array of Byte zu benutzen (und der Speicherverbrauch wär ähnlich)...

ABER: Es gibt bereits im Netz recht effiziente Algorithmen zum Gebrauch sehr großer Zahlen, wär wohl sinnvoller danach zu suchen...

Zum Beispiel gibts da auch einiges hier im Forum:
www.delphi-forum.de/...54152ae43351d085507e