Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi mod mit extended (https://www.delphipraxis.net/25385-mod-mit-extended.html)

Alexander Roth 5. Jul 2004 19:35


mod mit extended
 
Weis jemand, wie man mod auf Gleitkommazahlen anwendet??? Müsste nämlich auch sehr große Zahlen berechnen.

sakura 5. Jul 2004 19:36

Re: mod mit extended
 
Zitat:

Zitat von Alexander Roth
Weis jemand, wie man mod auf Gleitkommazahlen anwendet??? Müsste nämlich auch sehr große Zahlen berechnen.

MOD geht nicht mit GKZ, da MOD rein für Integer definiert ist ;)

...:cat:...

Alexander Roth 5. Jul 2004 19:56

Re: mod mit extended
 
Weswegen frag ich wohl!

sakura 5. Jul 2004 20:01

Re: mod mit extended
 
Zitat:

Zitat von Alexander Roth
Weswegen frag ich wohl!

Du hast gefragt, wie man MOD auf GKZ anwendet und da habe ich geschrieben, daß das nicht geht. Warum Du fragst, weiß ich nicht ;)

...:cat:...

Alexander Roth 5. Jul 2004 20:17

Re: mod mit extended
 
Tschuldigung. Hat heute einen sch.. Tag. Also: Gibt es eine ähnliche Funktion für GKZ oder kommt man über ein paar Tricks auch zum Ziel???

tommie-lie 5. Jul 2004 20:20

Re: mod mit extended
 
Reicht dir der Wertebreich von Int64? Mit dem kann man den Modulo berechnen.
Ansonsten gibt's im Netz diverse Bibliotheken für [google="big integer"]große Integerzahlen[/google], die sollten normalerweise auch den Module können.

Alexander Roth 5. Jul 2004 20:28

Re: mod mit extended
 
Nee.. Leider reicht int64 nicht. Ich schau mich mal im Netz um nach Big Integer. Danke.

Niels 5. Jul 2004 20:49

Re: mod mit extended
 
Hallo,
Bei Gleitkommazahlen (ich denk du willst hier auf Extended hinaus) hast du auch "nur" 19-20 signifikante Stellen (entspricht 64bit). Das heißt, dass alles was drüber hinaus geht einfach wegfällt, bzw durch Nullen ersetzt wird. Extended bringt dir hier also nicht mehr als int64.

Es gibt im Netz sicher viele Bignum-Typen. Um daraus zu lernen könntest du dir aber auch selbst einen coden :-D
Und ne Funktion für Modula zu schreiben ist auch nicht schwer (selbst schonmal gemacht). Also viel Spaß :wink:

mfg Niels! :thuimb:

a51 6. Jul 2004 08:10

Re: mod mit extended
 
müsste so in etwa gehen...

Delphi-Quellcode:
exmod:= div1-div2*int(div1/div2);
..., oder? natürlich nur, sofern int() die dezimalen einfach weglässt und nicht aufrundet...!

cya, 1-3-3-7-biatches...!

negaH 6. Jul 2004 18:16

Re: mod mit extended
 
mod ist der Rest einer Division im Ganzzahlenbereich. Bei Floats ist der Rest der Divison der Fraktionale Part, also der Nachkommateil. Du kannst also sehr wohl mit Fließkommazahlen eine "modulo" Operation durchführen. Dazu wird mit Frac(Value) der Nachkommateil extrahiert und in eine Ganzzahl umgewandelt. Da aber bei JEDER Fließkommaoperation auch implizit gerundet wird ist dieser Weg meistens nicht aussagekräftig.

Gruß Hagen

choose 7. Jul 2004 23:11

Re: mod mit extended
 
Hallo Hagen,

wenn ich Dich richtig verstanden habe, möchtest Du für für den Restklassenopratoren mod und a,b e R und m e N folgendes definieren:
Code:
a = b mod m
mit zB
Code:
a := (Trunc(b) mod m) + Frac(b)
sehe ich das richtig?
Ist m dabei zwingend eine natürliche Zahl oder siehst Du eine Möglichkeit, nicht-abzählbar viele Restklassen mit m e R zu erzeugen?

alcaeus 8. Jul 2004 04:32

Re: mod mit extended
 
Du kannst aus der Gleitkommazahl zwar noch den Rest berechnen, aber im Grunde haben Gleitkommazahlen keinen Rest, denn alles, was nicht durch eine Ganzzahldivision gelöst werden kann, wird als fraktionaler Teil dargestellt. Man kann den Rest der Ganzzahldivision aber wieder berechnen, jedoch nur ungenau:

Delphi-Quellcode:
a := b mod c;
Rest := Frac(a)*c;
oder auch so (dieser Weg ist genauer)
Delphi-Quellcode:
a := b mod c;
Rest := a - Trunc(a)*cö
Greetz
alcaeus

negaH 8. Jul 2004 07:02

Re: mod mit extended
 
Grundsätzlich gilt zu jedem Zahlensystem, das wenn die Division klar definiert ist diese Divison auch die Restklassen erzeugt. Egal also ob man Ganzzahlen, Fließkommazahlen oder Komplexezahlen usw. benutzt.

Das Manko ist nicht die Mathematik sondern die Rechentechnik die eben bei Fließkommazahlen "Verluste" erzeugt, sprich immer jede Operation rundet. Mathematisch kann man auch bei Divisionen mit gebrochenen Zahlen eine Modulo Operation durchführen. Dazu ist die Anwendung des GCD = Größten gemeinsammen Vielfaches notwendig.
Man kann also mit x'beliebigen Fließkommazahlen bei deren Division auch den Rest berechnen, nur eben mit dem Problem das die einzelnen Operationen auf Grund der Rechentechnik ungenaue Resultate liefern. Dies lässt sich aber kompensieren indem man die darzustellenden Zahlen in Matrizen umwandelt bei denen dann jedes Element IMMER innerhalb der exakt darstellbaren Grenzen des Zahlensystemes liegt. D.h. man zerlegt die großen Zahlen in deren Exponentielle Teile wobei jeder Einzelteil so klein gewählt wird das er immer exakt berechenbar ist. Nun, wird jede Operation auf dieser Darstellung der Zahl durchgeführt. Dabei kann man nun absolt exakte Berechnungen in jedem Zahlensystem zur jeder x'beliebigen Zahlendarstellung durchführen, die dann auch exakte Resultate liefert. Lange Rede kurzer Sinn: exakt so gehen math. Bibliotheken, wie obengenannte BigNum, BigFlots, LargeInteger usw. vor. Wenn man sich Zb. die 32 Bit Rechentechnik anschaut so wird man feststellen das die Hauptaufgabe der CPU darin besteht die Rechenoperationen auf 32 Bitzahlen so zu zerlegen das diese in der CPU in "Einzelschritten" auf Bits arbeitet. Ein 32Bit Integer wird also intern ebenfalls in 32 einzelne Bits zerlegt und immer nur 2 Bits werden addiert/subtrahiert usw. Auch hier wird also mit der Exponentiellen Zerlegung von 32 Bit Zahlen zur Basis 2 in einzelne Bits gearbeitet. Ob diese Einzelbits nun Ganzzahlige oder gebrochene Zahlen oder Fließkommazahlen darstellen ist für die Mathematik uninteressant, so lange man mit jeder Einzeloperation niemals die Fehlertoleranzen überschreitet.

Nun, bei einer normalen Division interessiert nur der Quotient, der bei Fließkommaoperationen annähernd exakt ist. Der modulare Rest dagegen ist nur auf Ganzzahlebene interessant (meistens zumindest) und dann wird er auch ganz exakt benötigt. Für solche Ansprüche sind die Fließkommazahlen, bzw. alle Rechenoperationen die implizit runden und Informationen "abschneiden" uninteressant.

Zb. eine RSA Schlüsselberechnung ist in Fließkommaarithmetik absolut untauglich. Alexander: es wäre also interessant zu wissen in welchem mathematischem Zusammenhang die Frage gestellt wurde, um sie korrekt beantworten zu können.

Gruß Hagen

Alexander Roth 8. Jul 2004 07:58

Re: mod mit extended
 
Hallo alle zusammen,

tut mir leid, dass ich erst so spät antworten kann (war krank und ans Bett gefesselt), ich wollte es für riesige Primzahlen benutzen. Mir war zwar klar dass es verdammt lange dauern würde eine so große Primzahl zu berechnen, doch ich wusste nicht,

Zitat:

Bei Gleitkommazahlen (ich denk du willst hier auf Extended hinaus) hast du auch "nur" 19-20 signifikante Stellen (entspricht 64bit).
dass Extended auch nur so wenige Stellen speichert. Damit erübrigt sich meine Frage, denn dann ist int64 anscheinend das größte was der Comp zu bieten hat.

Danke für eure Mühe!!!


Klaine Frage am Rande: Weis jemand wie groß ein Array von int64 sein kann??? Meldet bei mir nämich einen Fehler bei so ungefähr 10 Millionen Plätzen im Array.

tommie-lie 8. Jul 2004 13:08

Re: mod mit extended
 
Also selbst bei 100.000.000 Einträgen geht's bei mir noch (wenn auch mit intensiver Benutzung des Pagings ;-)). Das gesamte Array muss aber in RAM oder Auslagerungsdatei passen, wo soll er sonst die Daten unterbringen? ;-)

Alexander Roth 8. Jul 2004 19:22

Re: mod mit extended
 
Ja kann auch eine Millarde gewesen sein, aber dann ist bei mir zappeduster. Da bringt er irgend so einen gemeinen Fehler. Wollte nur wissen ob das normal ist.

Nikolas 8. Jul 2004 19:35

Re: mod mit extended
 
Zitat:

Zitat von Hagen
GCD = Größten gemeinsammen Vielfaches

Müsste das nicht Größter gemeinsamer Teiler (Greatest common Divisor) heissen ?

tommie-lie 8. Jul 2004 19:41

Re: mod mit extended
 
Zitat:

Zitat von Alexander Roth
Wollte nur wissen ob das normal ist.

Bei einem so großen Array: Ja.
Du musst dir das mal vor Augen führen: Ein Element ist 8 Byte groß. Jetzt hast du eine Milliarde Einträge, das sind 8 Milliarden Byte, etwas weniger als 8GB. Na, wieviel RAM hat deine Workstation inklusive Pagefile zur Verfügug? ;-)

Chewie 8. Jul 2004 19:53

Re: mod mit extended
 
Zitat:

Zitat von tommie-lie
Na, wieviel RAM hat deine Workstation inklusive Pagefile zur Verfügug? ;-)


Selbst wenn dein Pagefile auf 100 GB eingestellt sein würde, müsste der Speichermanager eines 32Bit-Betriebssystems die Speicheranforderung irgendwann verweigern, da er nicht mehr als 4 GB adressieren kann.

tommie-lie 8. Jul 2004 19:56

Re: mod mit extended
 
stimmt, daran habe ich (diesmal) nichtmal gedacht. Die maximale Größe für ein Array of Int64 ist also schon von der Architektur her auf 536 870 912 begrenzt, wobei das auch widerum nicht stimmt, da einige Teile des Adressbereichs bereits vergeben sind.

Alexander Roth 9. Jul 2004 06:34

Re: mod mit extended
 
Dann bin ich ja beruhigt und muss mir einen anderen Weg suchen.

Danke für eure Antworten

Alexander Roth 10. Jul 2004 16:20

Re: mod mit extended
 
Hat noch jemand kurz Zeit: Hab nämlich noch eine klitze kleine Frage: Wie viele Items kann eine Listbox aufnehmen???

Mirilin 10. Jul 2004 16:22

Re: mod mit extended
 
:hi:

Neue Frage, neuer Thread :)


mfg Tobias

Alexander Roth 10. Jul 2004 16:28

Re: mod mit extended
 
Bei so einer kleinen Frage :?: Aber gut.

Lefko 10. Jul 2004 16:30

Re: mod mit extended
 
trotzdem: irgendwas um die 32.000 soweit ich weiss!

:|

Alexander Roth 10. Jul 2004 16:34

Re: mod mit extended
 
Meine Antwort steht in "Anzahl der Items in der ListBox".


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:05 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