![]() |
mod mit extended
Weis jemand, wie man mod auf Gleitkommazahlen anwendet??? Müsste nämlich auch sehr große Zahlen berechnen.
|
Re: mod mit extended
Zitat:
...:cat:... |
Re: mod mit extended
Weswegen frag ich wohl!
|
Re: mod mit extended
Zitat:
...:cat:... |
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???
|
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. |
Re: mod mit extended
Nee.. Leider reicht int64 nicht. Ich schau mich mal im Netz um nach Big Integer. Danke.
|
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: |
Re: mod mit extended
müsste so in etwa gehen...
Delphi-Quellcode:
..., oder? natürlich nur, sofern int() die dezimalen einfach weglässt und nicht aufrundet...!
exmod:= div1-div2*int(div1/div2);
cya, 1-3-3-7-biatches...! |
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 |
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:
mit zB
a = b mod m
Code:
sehe ich das richtig?
a := (Trunc(b) mod m) + Frac(b)
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? |
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:
oder auch so (dieser Weg ist genauer)
a := b mod c;
Rest := Frac(a)*c;
Delphi-Quellcode:
Greetz
a := b mod c;
Rest := a - Trunc(a)*cö alcaeus |
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 |
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:
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. |
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? ;-)
|
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.
|
Re: mod mit extended
Zitat:
|
Re: mod mit extended
Zitat:
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? ;-) |
Re: mod mit extended
Zitat:
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. |
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.
|
Re: mod mit extended
Dann bin ich ja beruhigt und muss mir einen anderen Weg suchen.
Danke für eure Antworten |
Re: mod mit extended
Hat noch jemand kurz Zeit: Hab nämlich noch eine klitze kleine Frage: Wie viele Items kann eine Listbox aufnehmen???
|
Re: mod mit extended
:hi:
Neue Frage, neuer Thread :) mfg Tobias |
Re: mod mit extended
Bei so einer kleinen Frage :?: Aber gut.
|
Re: mod mit extended
trotzdem: irgendwas um die 32.000 soweit ich weiss!
:| |
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