Seite 1 von 2

HA7: Double?

Verfasst: 14. Dez 2007 14:48
von marek
Die Argumente der Prozedur Math.pow(arg0, arg1) sind ja offensichtlich vom Typ double. Soll das heißen, man kann eigentlich nur mit Zahlen der Form a.b die Potenzen rechnen?
Soll ich alle Exponenten in der Klasse Term zu double umschreiben?? Aber dann sieht das ganze ungefähr so aus: 4x^2.0 + 3x^5.0
Ist eigentlich nicht das, was ich will. Kann man nicht auf eine einfachere Weise Potenzen rechnen? Oder gibt es eine Prozedur, die zwischen double und int konvertiert?? :?:

Verfasst: 14. Dez 2007 14:50
von s!mon
Was du zb machen kannst ist ein Typecast:

return t.getFactor() * (int) Math.pow(x, t.getExponent());

Weiß net ob das gern gesehen wird, ich habs so gelöst ;)

Verfasst: 14. Dez 2007 15:09
von Stefan_P
Also ich habe bei mir auch Math.pow benutzt, allerdings geht es, ohne dass ich meine Integer-Variablen irgendwie konvertieren müsste....sowohl Parameter als auch Rückgabe sind bei mir da vom Typ Integer... 8)

Verfasst: 14. Dez 2007 15:27
von marek
Kann nicht sein, bei mir wirds sofort rot unterstrichen, wenn ich was "Intergeres" eingebe...

Verfasst: 14. Dez 2007 15:34
von Stefan_P
Hmm....also hier geht es einwandfrei....hatte es auch schon kompiliert...

Hast du evtl. die Variablen nicht definiert.....?
Guck mal nach, was angezeigt wird, wenn du mit der Mauszeiger ganz links in der Fehlerzeile gehst (aufs rote "X")....da müsste sich das Problem dann zeigen.

Verfasst: 14. Dez 2007 16:04
von marek
Stefan_P hat geschrieben:Hmm....also hier geht es einwandfrei....hatte es auch schon kompiliert...

Hast du evtl. die Variablen nicht definiert.....?
Guck mal nach, was angezeigt wird, wenn du mit der Mauszeiger ganz links in der Fehlerzeile gehst (aufs rote "X")....da müsste sich das Problem dann zeigen.
Glaub mir, ich weiß was das Problem ist, hab nur leider absolut keine Ahnung, wie man es beheben kann

Verfasst: 14. Dez 2007 16:44
von MelonTropic
So gehts interessanterweise auch:

Code: Alles auswählen

int result = 0;
result += Math.pow(2, 3);

+= anscheinend ein universeller "caster" :)

Verfasst: 14. Dez 2007 16:51
von ChristianK
Man kann auch einfach ne eigene Hilfsfunktion schreiben mit ner netten Schleife, die um a^b zu berechnen b mal a mit sich selbst multipliziert... dann hat man das Problem mit dem double gar nicht...

Verfasst: 14. Dez 2007 18:55
von raistlin
MelonTropic hat geschrieben:So gehts interessanterweise auch:

Code: Alles auswählen

int result = 0;
result += Math.pow(2, 3);

+= anscheinend ein universeller "caster" :)
der erkennts hier deswegen als int und nicht als double weil du hier
Int + Double rechnest

wenn du ne Rechenoperation auf zwei verschiedene Zahlentypen machst ist das ergebnis vom kleineren Zahlentyp.
Deswegen ist ja auch
3 / 2.0 = 1 (Int / double = Int)
und 3.0 / 2.0 = 0,666... (double / double = double)

Verfasst: 14. Dez 2007 20:07
von Osterlaus
Ich denk mal eher, dass automatisch nach dem Zieltyp gecastet wird und nicht nach dem "kleineren". Test dafür:

Code: Alles auswählen

public class Test {
	public static void main ( String[] args) {
		double testvar;
		testvar = 2.0;
		System.out.println("2+1.5="+(testvar + 1.5));
		System.out.println("2+2="+(testvar+2));
	}
}
Man beachte die Ausgabe in der zweiten Zeile ;)

Verfasst: 14. Dez 2007 23:09
von marek
So, hab die vorgeschlagene Schleife implementiert... Berfürchte aber, dass mir das bei der Quadratwurzel wenig hilft...

Verfasst: 14. Dez 2007 23:19
von Krümelmonster
Die Methode fürs Wurzelziehen ist:
Math.sqrt().

http://java.sun.com/j2se/1.5.0/docs/api ... rt(double)

Verfasst: 14. Dez 2007 23:20
von MelonTropic
raistlin hat geschrieben:
MelonTropic hat geschrieben:So gehts interessanterweise auch:

Code: Alles auswählen

int result = 0;
result += Math.pow(2, 3);

+= anscheinend ein universeller "caster" :)
der erkennts hier deswegen als int und nicht als double weil du hier
Int + Double rechnest

wenn du ne Rechenoperation auf zwei verschiedene Zahlentypen machst ist das ergebnis vom kleineren Zahlentyp.
Deswegen ist ja auch
3 / 2.0 = 1 (Int / double = Int)
und 3.0 / 2.0 = 0,666... (double / double = double)

bei mir ist 3/2.0 immer noch 1.5.

Verfasst: 15. Dez 2007 09:43
von Osterlaus
@MelonTropic: Kommt das nicht auf den Zieltyp an? Wenn ich einer Integer-Variablen 3/2.0 zuweise, müsste doch entweder 1 oder 2 rauskommen, aber nicht 1.5

Verfasst: 15. Dez 2007 10:48
von MelonTropic
Probiers mal aus:

Code: Alles auswählen

		int test;
		
		test = 3/2.0;