![]() |
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). |
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. |
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.! |
Re: Rechnen mit Strings bzw Sehr großen Zahlen
Zitat:
aus EditKompos. Auf 2Mrd. Stellen müsste man mit einem Byte-Array auch kommen. |
Re: Rechnen mit Strings bzw Sehr großen Zahlen
[OT]Hat das einen Sinn?
Zitat:
|
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: |
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: . |
Re: Rechnen mit Strings bzw Sehr großen Zahlen
Zitat:
Zitat:
;) |
Re: Rechnen mit Strings bzw Sehr großen Zahlen
Jetzt bin ich wieder Schuld... *g*
|
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. |
Re: Rechnen mit Strings bzw Sehr großen Zahlen
Zitat:
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 |
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 |
Re: Rechnen mit Strings bzw Sehr großen Zahlen
Zitat:
255 -> 8 Bit sind doch Pi über Daumen 2,5 Stellen!?! Zitat:
|
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 |
Re: Rechnen mit Strings bzw Sehr großen Zahlen
Zitat:
Tjoa..assemblieren kann ich leider noch nicht. :) |
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