Überlauf?

ThorstieB

Mitglied
GUten Morgen,
ich habe einige Rechenoperationen die im Wertebereich vom double ablaufen. Jedoch kommt nach einer unbestimmten Anzahl an Rechenoperationen (in Abhängigkeit vom variablen Eingangswert) eine negative Zahl heraus, dieses ist mathematisch aber nicht möglich. Ist dieses ein Zeichen für das Überlaufen von double?
Wenn ja, kann ich gegebenfalls, meine Werte nach/während der Rechnung einfach runden um so einen Überlauf zu verhinden?

Ich denke das bei der Nutzung von:
Java:
double d = 2.3445635634567;
NumberFormat n = NumberFormat.getInstance();
n.setMaximumFractionDigits(2); // max. 2 stellen hinter komma
System.out.println(n.format(d));
das Runden wahrscheinlich zu spät kommt.

mit freundlichem Gruß
Thorsten
 

homer65

Top Contributor
Viel wahrscheinlicher ist, das du einen Programmierfehler gemacht hast.
Um dem auf die Spur zu kommen könntest du Zwischenergebnisse ausgeben und diese überprüfen.
 

ThorstieB

Mitglied
also es ist kein Programmierfehler, die Zahlen die "klein" sind hauen bis in die X-te Schleife hin, sobald aber Zahlen mit "unendlich" vielen Nachkommastellen kommen, beginnen die "Fehler".
 

ThorstieB

Mitglied
ich arbeite mich gerade in bigdecimal ein, kann ich da auch alle rechenoperationen durchführen die mir double bietet?
ich benötige vorallem eine e^x-Funktion:

Java:
0.004 * Math.exp(0.00004269 * x) * y

x und y sind werte die ich im vorfeld eingebe, ich denke diese Funktion ist auch für den Überlauf zuständig.

EIne Frage zum Überlauf habe ich da noch:

Wonach richtet sich ein Überlauf, kann er mit der Anzahl der Nachkommastellen zusammenhängen oder immer erst wenn eine Zahl sozusagen zugroß wird?
 

Fu3L

Top Contributor
e^x bekommst du mit BigDecimal.valueOf(Math.E).pow(x);

Ein Überlauf kommt nur Zustande, wenn die Zahl zu groß oder klein wird. Die Anzahl der Nachkommastellen ist dafür nicht entscheident, die werden einfach abgeschnitten.(Allerdings kanns passieren, wenn du eine Zahl hast, die sich sehr stark an 0 annähert, dass du dann 0 bekommst ;))
 

Marco13

Top Contributor
Ja, das berühmte Epsilon, das SO klein ist, das es negativ wird, wenn man es halbiert.
Im Ernst: Egal wie klein ein double ist, und egal wie viele Nachkommastellen es hat, negativ wird es nur, wenn es wirklich negativ wird. Meinst du mit "Fehler" vielleicht eine Ausgabe wie "1.345e-32" (wo ein "-" drin vorkommt)?
 

ThorstieB

Mitglied
nein, es ist ein echtes "negativ", aber rein mathematisch kann es nicht negativ werden,aber ich überprüfe auch gerade meinen Code auf etwaigige Lücken/Fehler.

Auf jeden Fall bekomme ich beim Output -XXXXXXXX,XXXXX heraus
 

Ähnliche Java Themen


Oben