Digital Signal Processing Reference
In-Depth Information
der Wert von c nicht 0.4, sondern 0.0, weil der Ausdruck a/b auf der
rechten Seite den int -Wert 0 ergibt, der bei der nachfolgenden Zuweisung
auf c automatisch auf den double -Wert 0.0 konvertiert wird.
Wollten wir a/b als Gleitkommaoperation berechnen, so mussen
wir zunachst mindestens einen der Operanden in einen Gleitkommawert
umwandeln, beispielsweise durch einen expliziten type cast (double) :
B Java-Noti zen
double c = (double) a / b;
Dabei ist zu beachten, dass (double) nur den unmittelbar nachfolgenden
Wert a betrifft und nicht den gesamten Ausdruck a/b ,d.h.derWert
b behalt den Typ int .
Beispiel
Nehmen wir z. B. an, wir mochten die Pixelwerte p i eines Bilds so skalie-
ren, dass der momentan großte Pixelwert p max auf 255 abgebildet wird
(s. auch Kap. 5). Mathematisch werden die Pixelwerte einfach in der
Form
p i
p max ·
q
255
skaliert und man ist leicht versucht, dies 1:1 in Java-Anweisungen um-
zusetzen, etwa so:
int p_max = ip.getMaxValue();
...
int p = ip.getPixel(u,v);
int q = (p / p_max) * 255;
...
Wie wir leicht vorhersagen konnen, bleibt das Bild schwarz, mit Aus-
nahme der Bildpunkte mit dem ursprunglichen Pixelwert p_max (was
wird mit diesen?). Der Grund liegt wiederum in der Division (p/p_max)
mit zwei int -Operanden, wobei der Divisor ( p_max ) in den meisten
Fallen großer ist als der Dividend ( p ) und die Division daher null er-
gibt.
Naturlich konnte man die gesamte Operation auch (wie oben gezeigt)
mit Gleitkommawerten durchfuhren, aber das ist in diesem Fall gar nicht
notwendig. Wir konnen stattdessen die Reihenfolge der Operationen ver-
tauschen und die Multiplikation zuerst durchfuhren:
int q = p * 255 / p_max;
Die Multiplikation p * 255 erzeugt zunachst große Zwischenwerte, die
fur die nachfolgende (ganzzahlige) Division nunmehr kein Problem dar-
stellen. In Java werden ubrigens arithmetische Ausdrucke auf der glei-
chen Ebene immer von links nach rechts berechnet, deshalb sind hier
auch keine zusatzlichen Klammern notwendig (diese wurden aber auch
nicht schaden).
Search WWH ::




Custom Search