Autor |
Beitrag |
GR-Thunderstorm
      
Beiträge: 206
|
Verfasst: Mo 18.06.12 07:47
Ich nutze noch Delphi 7 und sitze an einem Programm, mit dem ich Messwerte simulieren möchte. Dabei treten Zahlen bis hoch zu 10^2000 auf. Mein Problem: Ich benötige jede einzige Stelle und nicht nur die ersten 20! Noch besser wären zusätzlich noch mindestens 10 Nachkommastellen.
Was für Möglichkeiten bleiben mir da?
Was denkt ihr von der Idee, ein Array aus mehreren Zahlen zu verwenden?
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 18.06.12 08:12
Es gibt dafür (anders als in manchen anderen Sprachen) keinen direkten Datentyp, aber einige Bibliotheken wie diese:
[url] www.entwickler-ecke....02&view=df[/URL]
|
|
Delphi-Laie
      
Beiträge: 1600
Erhaltene Danke: 232
Delphi 2 - RAD-Studio 10.1 Berlin
|
Verfasst: Mo 18.06.12 08:32
GR-Thunderstorm hat folgendes geschrieben : | Ich nutze noch Delphi 7 und sitze an einem Programm, mit dem ich Messwerte simulieren möchte. Dabei treten Zahlen bis hoch zu 10^2000 auf. Mein Problem: Ich benötige jede einzige Stelle und nicht nur die ersten 20! |
Was immer da simuliert wird, Meßwerte können es jedenfalls nicht sein. Die Welt, in der wir leben, umfaßt nämlich nicht einmal ansatzweise 2000 Größenordnungen. Sogar von der Elementarlänge bis zur Ausdehung des Universums, vom Zeitelement bis zur vermuteten Lebensdauer des Universums sind es höchstens ein paar Dutzend.
|
|
GR-Thunderstorm 
      
Beiträge: 206
|
Verfasst: Mo 18.06.12 09:00
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
Die Messwerte werden hinterher durch einen Wert dividiert, der "nur" um die größenordnung von 10^1980 (oder ähnlich) darüber liegt.
Und Bspw. 10^2000 / (10^2000 + 10^1984) ist nunmal nicht 1,000000000000000000000000000000000000000000000000000000000000000..000 sondern irgendetwas knapp darunter!
Danke an jaenicke für den Tipp, das schaue ich mir auf alle Fälle mal an. 
|
|
Delphi-Laie
      
Beiträge: 1600
Erhaltene Danke: 232
Delphi 2 - RAD-Studio 10.1 Berlin
|
Verfasst: Mo 18.06.12 09:08
GR-Thunderstorm hat folgendes geschrieben : | Und Bspw. 10^2000 / (10^2000 + 10^1984) ist nunmal nicht 1,000000000000000000000000000000000000000000000000000000000000000..000 sondern irgendetwas knapp darunter! |
Auweia, da schlägt die Mathematik aber Purzelbäume: 10^2000/10^1984=10^(2000-1984)=10^16 (einfaches Potenzrechnen, gibt es sogar bis hinab zu "niederen" Schulformen). Dafür benötigt man keine Langzahlarithmetik. Edit: OK, das war MEIN Fehler, MEIN Lesen Deines Beitrages schlug Purzelbäume. Etwa an/ab der 16. Stelle nach dem Komma werden die Ziffern von 0 abzuweichen beginnen, aus eben diesem Grunde. Warum Meßwerte solch unrealistischen Berechnungen unterworfen werden, ist allerdings nach wie vor rätselhaft.
Langzahlunits gibt es übrigens einige, aber ich favorisiere auch die von Benny Baumann. Seine Unit ist allerdings nur für Langzahlen geeignet, es gibt nur eine Division, die einen Nachkommaanteil ausgibt, und den auch nicht gerade sonderlich lang.
Zuletzt bearbeitet von Delphi-Laie am Mo 18.06.12 09:26, insgesamt 6-mal bearbeitet
|
|
Gammatester
      
Beiträge: 328
Erhaltene Danke: 101
|
Verfasst: Mo 18.06.12 09:11
Bignum2 versteht 'nur' Ganzzahlarithmetik. Wenn Du große Fließkommazahlen brauchst, kann ich Dir MPArith empfehlen.
|
|
GR-Thunderstorm 
      
Beiträge: 206
|
Verfasst: Mo 18.06.12 09:17
Delphi-Laie hat folgendes geschrieben : | GR-Thunderstorm hat folgendes geschrieben: | Und Bspw. 10^2000 / (10^2000 + 10^1984) ist nunmal nicht 1,000000000000000000000000000000000000000000000000000000000000000..000 sondern irgendetwas knapp darunter! |
Auweia, da schlägt die Mathematik aber Purzelbäume: 10^2000/10^1984=10^(2000-1984)=10^16 (einfaches Potenzrechnen, gibt es sogar bis hinab zu "niederen" Schulformen). Dafür benötigt man keine Langzahlarithmetik.
Langzahlunits gibt es übrigens einige, aber ich favorisieren auch die von Benny Baumann. |
Ja im Kopf kann ich das auch rechnen. Um so schlimmer, dass Delphi das nicht mit Boardmitteln kann! Aber das war auch nur ein Beispiel!
Wenn du etwas realistischere Zahlen haben möchtest (auch nur Beispiele!):
Pi*10^1900 / (Pi*10^1900 + exp(6895)/(1*10^1010))
Viel Spaß beim Rechnen.
PS: Programme schreibt man, damit solche Dinge automatisiert ablaufen und ggf. auch noch gleich in Graphen oder ähnliches geplottet werden können, wie es bei mir der Fall ist (bzw. sein soll). Würde ich die Rechenarbeit auf dem Papier machen (für etwa ~10^20 verschiedene Zahlenpaare) säße ich für den Rest meines Lebens daran.
|
|
Delphi-Laie
      
Beiträge: 1600
Erhaltene Danke: 232
Delphi 2 - RAD-Studio 10.1 Berlin
|
Verfasst: Mo 18.06.12 09:24
GR-Thunderstorm hat folgendes geschrieben : | PS: Programme schreibt man, damit solche Dinge automatisiert ablaufen und ggf. auch noch gleich in Graphen oder ähnliches geplottet werden können, wie es bei mir der Fall ist (bzw. sein soll). Würde ich die Rechenarbeit auf dem Papier machen (für etwa ~10^20 verschiedene Zahlenpaare) säße ich für den Rest meines Lebens daran. |
Hier muß ich schon wieder einhaken: 10^20 (!!) Zahlenpaare zu berechnen, reicht - grobe Gefühlsschätzung - auch der "Rest des Lebens" eines Computers nimmer aus, so fleißig und schnell Dein kleiner Rechenfreund auch sein mag!
Rechnen (lassen) kannst Du natürlich, was Deinem Computer und Dir beliebt, Du mußt Dich da in keiner Weise rechtfertigen, nur was da berechnet werden soll, kann so, wie Du es hier darstellst, nicht stimmen.
|
|
Gammatester
      
Beiträge: 328
Erhaltene Danke: 101
|
Verfasst: Mo 18.06.12 09:34
|
|
GR-Thunderstorm 
      
Beiträge: 206
|
Verfasst: Mo 18.06.12 09:50
|
|
Tranx
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Mo 18.06.12 16:45
Wenn Du schon so genau rechnen willst, dann aber bitte auch PI mit 1980 Stellen.
Also - abseits von theoretischen Überlegungen - der Sinn erschließt sich mir immer noch nicht. PI mit 10^1910 zu multiplizieren .. Da muss ich dem Vortexter Recht geben. Selbst das Universum mit seinen Clustern und Superclustern hat sicher nicht mal 1 10^-1000-stel der Atome. Klar ist das Ergebnis:
10^2000/(10^2000 + 10^1980) kleiner als 1. Und um wieviel? Nun: um 10^-20 kleiner. Ich gebe zu, die Differenz ist sehr ungenau.
Aber mit pi auf 30 Stellen zu rechnen, und dann Exponentialfunktionen ebenfalls auf 30 Stellen, das führt letztlich doch zu einem genau so großen Fehler, als wenn man gleich überschlagsmäßig rechnen würde.
Aber ich gebe Dir Recht. Du musst Dich nicht rechtfertigen. Aber ich darf doch mal den Sinn in Frage stellen, oder?
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Mo 18.06.12 17:17
Wenn ich das richtig sehe, geht es hier nicht um 2000-Stellen-Genauigkeit, sondern um 30 oder vielleicht auch 50. Die Zahlen sind nur generell *etwas* größer. Die normalen Datentypen liefern diese hohe Genauigkeit nicht, Alternativen wurden ja bereits genannt, wobei ich die Integer-Units hier rauslassen würde.
Wollte ich nur mal einwerfen, damit die Diskussion bzgl. "Diese Genauigkeit braucht kein Mensch" nicht allzusehr ausufert. 
_________________ We are, we were and will not be.
|
|
GR-Thunderstorm 
      
Beiträge: 206
|
Verfasst: Mo 18.06.12 17:35
Tranx hat folgendes geschrieben : | Wenn Du schon so genau rechnen willst, dann aber bitte auch PI mit 1980 Stellen.
Also - abseits von theoretischen Überlegungen - der Sinn erschließt sich mir immer noch nicht. PI mit 10^1910 zu multiplizieren .. Da muss ich dem Vortexter Recht geben. Selbst das Universum mit seinen Clustern und Superclustern hat sicher nicht mal 1 10^-1000-stel der Atome. Klar ist das Ergebnis:
10^2000/(10^2000 + 10^1980) kleiner als 1. Und um wieviel? Nun: um 10^-20 kleiner. Ich gebe zu, die Differenz ist sehr ungenau.
Aber mit pi auf 30 Stellen zu rechnen, und dann Exponentialfunktionen ebenfalls auf 30 Stellen, das führt letztlich doch zu einem genau so großen Fehler, als wenn man gleich überschlagsmäßig rechnen würde.
Aber ich gebe Dir Recht. Du musst Dich nicht rechtfertigen. Aber ich darf doch mal den Sinn in Frage stellen, oder? |
Das mit der Zahl Pi war auch nur ein Beispiel und vollkommen aus der Luft gegriffen.
Fakt ist jedenfalls: Ich brauche mehr Genauigkeit.
Dem ersten Blick nach sollte die MPArith-Library super geeignet sein dafür. Danke für den Hinweis! 
|
|