Discussion:
Frage zum Script
(zu alt für eine Antwort)
Martin Schreiber
2004-12-04 19:12:43 UTC
Permalink
hab' folgende frage zum info skript

vielleicht kann mir die jemand beantworten :)

seite 35: nach der Tabelle steht, dass ueberlauf und unterlauf die werte
infinity bzw. -infinity liefern. wie soll ich das bitte verstehen? wenn
ich in c einen ueberlauf habe, dann "kommt" die zahl vom einen extremum in
das entgegengesetzte.
oder habe ich infinity so zu verstehen, dass es der maximale wert ist, den
die zahl annehmen kann? wird das ganze dann auch von der recheneinheit so
interpretiert, dass die maximale (minimale) zahl das unendliche darstellt?
oder wird die eigenschaft +-infinity separat im rechenwerk der jvm durch
ein separates byte dargestellt und ausgewertet?

bedeutet das auch, dass ich bei float und double variablen keinen
"wirklichen" (z. b. wie ein i386) ueberlauf (bzw. unterlauf) erzeugen kann?
ComicSansMS
2004-12-05 13:39:58 UTC
Permalink
Hi!

Jaja, die Fließkommaarithmetik *g* Also erstmal eines vorweg: Wenn du mit
Floats rechnest solltest du zuallererst ALLES vergessen was du über
Rechenoperationen weisst, bei Floats läuft nämlich alles etwas anders als
bei Integers.
Das mit dem Inf und NaN ist etwas komliziert und für den Programmieralltag
auch nicht wirklich wichtig.
Stell dir Inf einfach als Überlaufäquivalent der Fließkommazahlen vor, NaN
bezeichnet einen ungültigen Wert, mit dem allerdings weitergerechnet werden
kann. Falls du die Sache wirklich verstehen willst empfehle ich den
exzellenten Artikel über Fließkommazahlen auf 3dcenter.de:
http://www.3dcenter.de/artikel/fp_format/
Aber vorsicht: Dafür geht leicht ein Vormittag drauf ;)

Gruß,

Andreas Weis
Post by Martin Schreiber
hab' folgende frage zum info skript
vielleicht kann mir die jemand beantworten :)
seite 35: nach der Tabelle steht, dass ueberlauf und unterlauf die werte
infinity bzw. -infinity liefern. wie soll ich das bitte verstehen? wenn
ich in c einen ueberlauf habe, dann "kommt" die zahl vom einen extremum in
das entgegengesetzte.
oder habe ich infinity so zu verstehen, dass es der maximale wert ist, den
die zahl annehmen kann? wird das ganze dann auch von der recheneinheit so
interpretiert, dass die maximale (minimale) zahl das unendliche darstellt?
oder wird die eigenschaft +-infinity separat im rechenwerk der jvm durch
ein separates byte dargestellt und ausgewertet?
bedeutet das auch, dass ich bei float und double variablen keinen
"wirklichen" (z. b. wie ein i386) ueberlauf (bzw. unterlauf) erzeugen kann?
Wolfgang Kempin
2004-12-05 13:35:22 UTC
Permalink
Hallo Martin!
Post by Martin Schreiber
seite 35: nach der Tabelle steht, dass ueberlauf und unterlauf die werte
infinity bzw. -infinity liefern. wie soll ich das bitte verstehen?
Java benutzt IEEE 754-1985 Floats (und Doubles). Das heißt, neben den
"normalen" Zahlen lassen sich zusätzlich noch einige Sonderwerte darstellen:

* Unendlich (Infinity)
double inf = 1.0/0.0;

* Minus Unendlich (-Infinity)
double neginf = -1.0/0.0;

* Negative Null
double negzero = -1.0/inf;

* Not-A-Number
double NaN = 0.0/0.0;

Das sind alles selbstständige Werte; Infinity entspricht also nicht dem
höchsten darstellbaren Wert. In Java gibt es keinen Wrap-around bei
Über-/Unterläufen.

Zu den Datentypen float und double gibt es übrigens Klassen namens Float
und Double, die diese Spezialwerte gleich als Konstanten mitdefinieren
(MIN_VALUE, MAX_VALUE, NEGATIVE_INFINITY, POSITIVE_INFINITY, NaN).

Lustig dabei ist auch: Not-A-Number ist keine Zahl. Folglich ist NaN
auch gleich keiner anderen Zahl, nicht einmal gleich sich selbst ;)

Viele Grüße,
Wolfgang

Loading...