Multiplikation führt zu -1.#IND00. Gibts nen Work-Around?
-
Hallo,
habe das Problem, dass ich bei der folgenden Multiplikation
8.0429694853611358e+298 * -7.6770546693119882e+020 = -1.#IND00
erhalte.Es scheint also so, als ob ich über den Wertebereich eines Doubles hinausgeschossen bin
Was nun? Muss ich jetzt einen eigenen Datentyp entwerfen oder gibts da irgend ein Trick oder ein größeres Double, um da zu vermeiden?Danke
-
zehnerlogarithmen addieren und pow(10,frac(x)) + "e" + floor(x) ausgeben.
-
Hi,
wie kann ich das Ergebnis dann speichern? Der Datentyp double reicht dafür anscheinend nicht aus.
Ich bräuchte sowas wie einen erweiterten Double-Datentyp. Genauigkeit ist nicht so wichtig.
Wenn also nur -2,8945*10^794545 gespeichert wird, ist das vollkommen ausreichend. Also weniger Bytes für Nachkommastellen und mehr Bytes für den Exponenten.
-
guggsu hia:
http://cplus.kompf.de/artikel/gmp.html
-
dlgig schrieb:
Hi,
wie kann ich das Ergebnis dann speichern? Der Datentyp double reicht dafür anscheinend nicht aus.doch, speicherst einfach x.
Ich bräuchte sowas wie einen erweiterten Double-Datentyp. Genauigkeit ist nicht so wichtig.
also x. speicherst den zehnerlogarithmis der zahl statt der zahl selber.
Wenn also nur -2,8945*10^794545 gespeichert wird, ist das vollkommen ausreichend.
jup. 2,8945*10^794545 würde 79545,4615735539 entsprechen. leider hat der zehnerlogarithmus leinen platz für das vorzeichen. so ganz einfach klappts nur mit positiven zahlen.
-
Danke für eure Antworten.
guggi schrieb:
guggsu hia:
http://cplus.kompf.de/artikel/gmp.htmlDanke für den Tipp. Aber "Rechnen mit beliebiger Genauigkeit" irritiert mich etwas. Genauigkeit ist mir in der Größenordnung egal. Wichtiger ist mit "Rechnen mit beliebig großen und kleinen Zahlen" wobei der Exponent quasi beliebig groß sein kann. Auch sollte nicht viel mehr als 64bit Speicher beansprucht werden, da ich hier ein sehr großes 2 DImensionales Array mit dem Datentyp habe.
Ich versuche sehr große Gleichungssysteme (> 100x100) mit einem Gaus-Algorithmus zu lösen. Dabei ufern die Zahlen schon mal aus.
Algorithmus ist ja: Zahl in vordersten Spalte der 1. Gleichung * Zahl der aktuellen Spalte der 2. Gleichung - Zahl in vordersten Spalte der 2. Gleichung * Zahl der aktuellen Spalte der 1. Gleichung@volkard
Okay. Das ist auch eine Idee, obwohl mit das Vorzeichen schon wichtig ist. Aber ehrlich gesagt kann ich mir nicht vorstellen, dass ich eine Zahl unterschiedlich im Datentyp Double darstellen kann.Im Notfall muss ich mir einen eigenen Datentyp in Form einer Struktur erstellen:
struct GrosseZahl //Beispiel Zahl: -11854000,4545545154845154 { bool Vorzeichen; //true unsigned int Zahl; //118540004 int Exponent; //+8 // = -0,118540004 * 10^7 }
Das wären nur 65 bit.