Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi wirklich große Zahlen unter Delphi (https://www.delphipraxis.net/75188-wirklich-grosse-zahlen-unter-delphi.html)

Antigo 15. Aug 2006 16:42


wirklich große Zahlen unter Delphi
 
Hi,
aus langeweile und Interesse habe ich mir ein Faktorisierungsprogramm geschrieben. Das ist nichts tolles, das weiss ich, aber ich würde mein Programm trotzdem mal gerne an wirklich großen Zahlen versuchen lassen. Und mit groß meine ich erstmal Zahlen mit einer zweistelligen Anzahl an Ziffern.

Ich weiss das es sowas wie Int64 gibt. Aber erstens würde das (wenn ich das richtig verstehe) auch "nur" (:D) Zahlen bis 2^64 zulassen. Und da wäre dann ja auch bei 19 Stellen schluss.
Und zweitens weiss ich nicht wie ich damit arbeite. Kann ich einfach überall statt >Integer< >Int64< schreiben?

Und wie gehts danach weiter? WIe kann ich mit noch größeren Zahlen arbeeiten?


Vielen Dank schonmal im vorraus :)

3_of_8 15. Aug 2006 16:50

Re: wirklich große Zahlen unter Delphi
 
Fast.

Wenn du wirklich große Zahlen suchst, nimm Extended. Das Teil kann sehr große Zahlen verarbeiten, allerdings dann nur noch auf maximal 20 Stellen genau, dafür jedoch fast beliebig groß.

Und etwas langsamer.

Ansonsten geht Int64 genauso wie Integer, nur ist es kein Ordinaltyp, das heißt du kannst sie nicht für Schleifen verwenden.

EDIT: Wenn dus noch größer brauchst, verwende die DECMath von Hagen.

Antigo 15. Aug 2006 17:00

Re: wirklich große Zahlen unter Delphi
 
das problem ist, dass ich zur Faktorisierung die Funktion >mod< unbedingt brauche. Und die funktioniert halt nur mit Integer Werten. Ansonsten müsste ich mir wohl irgendwas selbst basteln und die FUnktionen wie modulo selbst nachprogrammieren, was aber eigentlich für ein Spass programm etwas viel wäre.

Ich werd dann mal nach dieser DECMath Unit suchen. Vielen Dank :)

3_of_8 15. Aug 2006 17:14

Re: wirklich große Zahlen unter Delphi
 
[delphi]
function fmod(a, b: Extended): Extended;
begin
result:=a-(a/b);
end;

CalganX 15. Aug 2006 17:57

Re: wirklich große Zahlen unter Delphi
 
@3_of_8:
Extended < Int64

Abgesehen davon verwendet Extended Nachkommastellen und belegt dadurch schon Speicher. Bei einem Faktorisierungsprogramm braucht man aber keine Nachkommastellen.

Chris

Alexander Roth 15. Aug 2006 18:03

Re: wirklich große Zahlen unter Delphi
 
Zitat:

Zitat von 3_of_8
EDIT: Wenn dus noch größer brauchst, verwende die DECMath von Hagen.

Wie er es anscheinend bracht.

DEC kann ich nur empfehlen. Habe ich selbst bei einem meiner Matheprpgramme benutzt (siehe: Primfaktoren)

Schu mal auf Luckies Homepage. Da findest du die aktuelle DEC Version. Manches davon sogar Open Source!

Der_Unwissende 15. Aug 2006 18:07

Re: wirklich große Zahlen unter Delphi
 
Zitat:

Zitat von 3_of_8
Delphi-Quellcode:
function fmod(a, b: Extended): Extended;
begin
result:=a-(a/b);
end;

Dumme Frage, was genau soll denn fmod machen? Das hat doch nichts mit modulo zu tun, oder seh ich das gerade völlig falsch? Wenn ich mit der Formel z.B. 10 mod 5 rechne, würde ich als Ergebnis 10 - (10 / 2) = 8 bekommen, hm, wäre ich nicht glücklich!

Gruß Der Unwissende

3_of_8 15. Aug 2006 18:14

Re: wirklich große Zahlen unter Delphi
 
Ups, da hast du recht. Hab ich Mist gebaut.

Delphi-Quellcode:
function fmod(a, b: Extended): Extended;
begin
result:=a-Extended(trunc(a/b))*b;
end;
@Chakotay: Ein Gleitkommawert ist AFAIK so aufgebaut, dass er eine Zahl sowie ihren 10er Exponenten speichert. Das heißt praktisch, ich nehme die Zahl 42 und lasse ihr Komma mal um 30 stellen nach rechts "gleiten" und habe dann 42*10^30, was man nicht mit nem Integer darstellen kann. ;)

CalganX 15. Aug 2006 18:24

Re: wirklich große Zahlen unter Delphi
 
Zitat:

Zitat von 3_of_8
@Chakotay: Ein Gleitkommawert ist AFAIK so aufgebaut, dass er eine Zahl sowie ihren 10er Exponenten speichert. Das heißt praktisch, ich nehme die Zahl 42 und lasse ihr Komma mal um 30 stellen nach rechts "gleiten" und habe dann 42*10^30, was man nicht mit nem Integer darstellen kann. ;)

Nein. Extended speichert die Daten nach IEEE754. D.h. es wird wenn überhaupt der Exponent zur Basis 2 gespeichert. Und sofern Extended unter Delphi nicht 64Bit belegt, wird Extended nicht an Int64 rankommen - und soweit ich weiß ist das der Fall. ;)

Chris

Der_Unwissende 15. Aug 2006 18:32

Re: wirklich große Zahlen unter Delphi
 
Zitat:

Zitat von Chakotay1308
D.h. es wird wenn überhaupt der Exponent zur Basis 2 gespeichert.

Was heißt denn hier wenn überhaupt? Natürlich wird ein Exponent abgespeichert! Wie soll denn bitte eine Gleitkommazahl ohne berechnet werden?

Zitat:

Zitat von Chakotay1308
Und sofern Extended unter Delphi nicht 64Bit belegt, wird Extended nicht an Int64 rankommen - und soweit ich weiß ist das der Fall. ;)

Wo kommt denn jetzt dieses Wissen her? Hilfe! Ich meine schau in die Delphi Hilfe, da steht dass Extended 10 Byte verwendet, 10 Byte = 80 Bit > 64 Bit. Dann kannst du gleich deine eigene Quelle bemühen, da steht:
Extended = 64 Bit Mantisse und 15 Bit Exponent (1 VZ Bit).

Eine Gleitkommazahl (genauer ihr Betrag) berechnet sich nun aus Mantisse * Basis (hier fest 2)^Exponent. Natürlich ist ein Extended hier also größer als ein Int64 Wert. Der Größte Extended Wert liegt bei 1.1 * 10^4932! Das ist ordentlich groß!


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:18 Uhr.
Seite 1 von 3  1 23      

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