Delphi-PRAXiS

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)

gmarts 25. Mai 2004 20:30


Rechnen mit Strings bzw Sehr großen Zahlen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi Unit:

4 praktische Funktionen und 2 halbpraktische Funktionen zum Thema Rechnen mit großen Zahlen.
Damit lassen sich Zahlen bis zu (10^2147483648)-1 darstellen und berechnen (Theoretisch, wenn man viel Zeit mitbringt).

neolithos 25. Mai 2004 20:34

Re: Rechnen mit Strings bzw Sehr großen Zahlen
 
Mal ne "blöde" Frage!
Warum müssen es Zahlen in Form von Strings sein?

Man hätte doch auch ein Byte-Array verwenden können.

Nicolai1234 25. Mai 2004 20:38

Re: Rechnen mit Strings bzw Sehr großen Zahlen
 
Weil man sonst auf keine 2 Milliarden Stellen kommt!
Und sie sind praktiischer zu speichern etc.!

gmarts 25. Mai 2004 20:42

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

Zitat von neolithos
Mal ne "blöde" Frage!
Warum müssen es Zahlen in Form von Strings sein?

Man hätte doch auch ein Byte-Array verwenden können.

Stimmt, würde auch gehen. Wäre aber nicht so komfortabel, schließlich stammen ja die Eingaben meist
aus EditKompos.

Auf 2Mrd. Stellen müsste man mit einem Byte-Array auch kommen.

Nicolai1234 25. Mai 2004 20:44

Re: Rechnen mit Strings bzw Sehr großen Zahlen
 
[OT]Hat das einen Sinn?
Zitat:

kjb 655aa+ä -90kä n2smb w z2ß0 ZHHH #^V% : ÄÄR$QÖ:K; WJM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM=)CÖyg8 u 82
[/OT]

gmarts 25. Mai 2004 20:46

Re: Rechnen mit Strings bzw Sehr großen Zahlen
 
[OT] Ja! pack das mal in eine Text-Datei, nenne sie in *.com um und führe es aus [/OT]

:mrgreen:




Scherz! Ist der erste Versuch meines 6 monatigen Sohns ein Delphi-Programm zu schreiben
:thuimb:

neolithos 25. Mai 2004 20:53

Re: Rechnen mit Strings bzw Sehr großen Zahlen
 
Also wenn ich meinen gedanken folge :idea: , komme ich auf

ln (2^(2^31 * 8)) / ln 10 = 5171655946 Stellen (wer braucht soviel :pale: )

Da soviel RAM selten gesteckt ist, gehen wir mal davon aus, wir haben 512 MB RAM = 2^29 Byte -> 2^28 Byte wollen wir für eine Zahl nutzen (das OS braucht ja auch noch einen kleinen Teil :mrgreen: .

ln (2^(2^28 * 8)) / ln 10 = 646456993 Stelle wären da mit meiner Idee drinn.
2^28 = 268435456 Stelle wären mit Strings möglich.

=> Ich hätte ca. 2,5 mal mehr Stellen zu Verfügung :stupid: .

P.S.: Hoffentlich habe ich mich nicht verrechnet :roteyes: .

gmarts 25. Mai 2004 21:00

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

Zitat von neolithos
Also wenn ich meinen gedanken folge :idea: , komme ich auf

ln (2^(2^31 * 8)) / ln 10 = 5171655946 Stellen (wer braucht soviel :pale: )

Nicolai1605 wollte sowas haben. :) Na eigentlich wollte er um die 1000 Stellen (365^365).



Zitat:

=> Ich hätte ca. 2,5 mal mehr Stellen zu Verfügung :stupid: .

Wer braucht soviel? :pale:


;)

Nicolai1234 25. Mai 2004 21:00

Re: Rechnen mit Strings bzw Sehr großen Zahlen
 
Jetzt bin ich wieder Schuld... *g*

neolithos 25. Mai 2004 21:04

Re: Rechnen mit Strings bzw Sehr großen Zahlen
 
Und ich hab mich doch verrechnet.

Ich wollte doch signed Zahlen! Also bitte noch ein Bit abziehen. :lol:

Ernst:
Diese Byte-Monster könnte man ohne weiteres mit Assemblerbefehlen schnell und sicher bearbeiten.

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 16:56 Uhr.

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