Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Rechnen mit Strings bzw Sehr großen Zahlen (https://www.delphipraxis.net/22896-rechnen-mit-strings-bzw-sehr-grossen-zahlen.html)

negaH 25. Mai 2004 21:22

Re: Rechnen mit Strings bzw Sehr großen Zahlen
 
Zitat:

.S.: Hoffentlich habe ich mich nicht verrechnet
Du solltest 3 mal größere Zahlen rechnen können.
Und ja, es ist wesentlich effizienter mit Array of Cardinal statt Strings zu rechnen. Der Durchfluß der Basis Operationen sollte sich dadurch mindestens verzehnfachen.
Es bleibt aber ein ganz kleines Problem: um mit array of Cardinal rechnen zu können muß man einige wichtige Funktionen in Assembler schreiben. JEDE 32 Bit Operation wie ADD, SUB, CMP, MUL und DIV kann auf Intel Systemen verkettet programmiert werden. Zb. wird bei einer Addition einfach sequentiell vom Low zu High Byte per ADC addiert. Ein Dezimaler String würde in einem Cardinal ca. 9 Stellen speichern, man wird also in einer Basisoperation in einem Cardinal Array mehr als 9 Dezimale Operationen durchführen. Statt also 9 mal ADD/ADC würde man mit einem ADD/ADC das gleiche erzielen.

Sogesehen, gibt es keine plausible und logische Begründung NICHT mit array of byte oder array of Cardinal zu arbeiten, statt mit Strings. Ok, einzigste Ausnahme ist das der Coder das bischen Assembler nicht beherrscht.

Gruß Hagen

negaH 25. Mai 2004 21:25

Re: Rechnen mit Strings bzw Sehr großen Zahlen
 
@gmarts,

in deinem ZIP finde ich keine Quelltexte sondern nur die DCU.
Aus dieser Sicht sind deine "praktischen" Funktionen leider sehr unpraktisch, denn das einzigste was sinnvoll ist wäre aus deinem Source lernen zu können.
Wenn es um Performance geht, oder um die Anzahl an nützlichen Features, oder Bedienbarkeit, dann gibt es eben viel bessere und praktische Source und Librarys im Netz.

Gruß Hagen

neolithos 25. Mai 2004 21:27

Re: Rechnen mit Strings bzw Sehr großen Zahlen
 
Zitat:

Zitat von negaH
Zitat:

.S.: Hoffentlich habe ich mich nicht verrechnet
Du solltest 3 mal größere Zahlen rechnen können.

Äh, Wie jetzt!

255 -> 8 Bit sind doch Pi über Daumen 2,5 Stellen!?!

Zitat:

Zitat von negaH
Sogesehen, gibt es keine plausible und logische Begründung NICHT mit array of byte oder array of Cardinal zu arbeiten, statt mit Strings. Ok, einzigste Ausnahme ist das der Coder das bischen Assembler nicht beherrscht.

So direkt wollte ich es auch nicht formulieren.

negaH 25. Mai 2004 21:30

Re: Rechnen mit Strings bzw Sehr großen Zahlen
 
~ 2,5 Stellen wenn man auf ein Byte rechnet, aber warum sollte man auf einer 32 Bit CPU sich auf 8 Bit Berechnungen konzentieren. Also, Cardinal = 32 Bit ist das Gebot der Stunde, und in einem Cardinal bekommst du 9 dezimale Stellen rein. Ok, 9.7 / 4 ~ 2.5, sogesehen haste Recht und ich mich verrechnet ;)

Gruß Hagen

gmarts 25. Mai 2004 21:30

Re: Rechnen mit Strings bzw Sehr großen Zahlen
 
Zitat:

Zitat von negaH
@gmarts,

in deinem ZIP finde ich keine Quelltexte sondern nur die DCU.
Aus dieser Sicht sind deine "praktischen" Funktionen leider sehr unpraktisch, denn das einzigste was sinnvoll ist wäre aus deinem Source lernen zu können.

Stimmt! Die Funktionen sind nur schnell dahin geschludert ... und bevor ich den QT hier poste, will ich nen bisschen Ordnung reinbringen.


Tjoa..assemblieren kann ich leider noch nicht. :)

negaH 25. Mai 2004 21:44

Re: Rechnen mit Strings bzw Sehr großen Zahlen
 
Es ist aber auch nicht allzu schwer. Was du benötigst sind 6 wichtige Algorithmen in Assembler.

1. Routine die 3 Cardinal Arrays mit identischer Größe Additiert, also R[] = A[] + B[]
2. Routine die 3 Cardinal Arrays mit identischer Größe Subtrahiert, also R[] = A[] - B[]
3. Routine die 1 Cardinal mit einem Cardinal Array multipliziert, also R[] = A[] * C
4. Routine die 1 Cardinal mit einem Cardinal Array dividiert und modulo rechnet, R[] = A[] / C, M = A[] mod C
5. Routine die ein Carry = Überlauf addiert also R[] = R[] + C
6. Routine die ein Borrow = Unterlauf subrahiert also R[] = R[] - C

Alle weiteren Operationen können nun immer auf obige 6 Algos. zurückgeführt werden.

Gruß Hagen


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:41 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz