HA7: Double?

marek
Mausschubser
Mausschubser
Beiträge: 85
Registriert: 18. Okt 2007 15:24
Wohnort: DA

HA7: Double?

Beitrag von marek » 14. Dez 2007 14:48

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?? :?:

Benutzeravatar
s!mon
Computerversteher
Computerversteher
Beiträge: 373
Registriert: 20. Okt 2007 18:24
Wohnort: Höchst i. Odw

Beitrag von s!mon » 14. Dez 2007 14:50

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 ;)

Stefan_P
Mausschubser
Mausschubser
Beiträge: 52
Registriert: 1. Okt 2007 19:04
Wohnort: Darmstadt

Beitrag von Stefan_P » 14. Dez 2007 15:09

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)

marek
Mausschubser
Mausschubser
Beiträge: 85
Registriert: 18. Okt 2007 15:24
Wohnort: DA

Beitrag von marek » 14. Dez 2007 15:27

Kann nicht sein, bei mir wirds sofort rot unterstrichen, wenn ich was "Intergeres" eingebe...

Stefan_P
Mausschubser
Mausschubser
Beiträge: 52
Registriert: 1. Okt 2007 19:04
Wohnort: Darmstadt

Beitrag von Stefan_P » 14. Dez 2007 15:34

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.

marek
Mausschubser
Mausschubser
Beiträge: 85
Registriert: 18. Okt 2007 15:24
Wohnort: DA

Beitrag von marek » 14. Dez 2007 16:04

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

Benutzeravatar
MelonTropic
Windoof-User
Windoof-User
Beiträge: 26
Registriert: 6. Dez 2007 12:55

Beitrag von MelonTropic » 14. Dez 2007 16:44

So gehts interessanterweise auch:

Code: Alles auswählen

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

+= anscheinend ein universeller "caster" :)

ChristianK
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 127
Registriert: 13. Sep 2007 01:15
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von ChristianK » 14. Dez 2007 16:51

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...

raistlin
Mausschubser
Mausschubser
Beiträge: 50
Registriert: 1. Okt 2007 18:55

Beitrag von raistlin » 14. Dez 2007 18:55

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)

Osterlaus
BSc Spammer
BSc Spammer
Beiträge: 1263
Registriert: 23. Aug 2007 12:46
Wohnort: DA

Beitrag von Osterlaus » 14. Dez 2007 20:07

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 ;)

marek
Mausschubser
Mausschubser
Beiträge: 85
Registriert: 18. Okt 2007 15:24
Wohnort: DA

Beitrag von marek » 14. Dez 2007 23:09

So, hab die vorgeschlagene Schleife implementiert... Berfürchte aber, dass mir das bei der Quadratwurzel wenig hilft...

Benutzeravatar
Krümelmonster
Geek
Geek
Beiträge: 767
Registriert: 17. Okt 2007 13:58
Wohnort: Jossgrund

Beitrag von Krümelmonster » 14. Dez 2007 23:19

Die Methode fürs Wurzelziehen ist:
Math.sqrt().

http://java.sun.com/j2se/1.5.0/docs/api ... rt(double)
Zuletzt geändert von Krümelmonster am 14. Dez 2007 23:20, insgesamt 1-mal geändert.
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

Benutzeravatar
MelonTropic
Windoof-User
Windoof-User
Beiträge: 26
Registriert: 6. Dez 2007 12:55

Beitrag von MelonTropic » 14. Dez 2007 23:20

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.

Osterlaus
BSc Spammer
BSc Spammer
Beiträge: 1263
Registriert: 23. Aug 2007 12:46
Wohnort: DA

Beitrag von Osterlaus » 15. Dez 2007 09:43

@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

Benutzeravatar
MelonTropic
Windoof-User
Windoof-User
Beiträge: 26
Registriert: 6. Dez 2007 12:55

Beitrag von MelonTropic » 15. Dez 2007 10:48

Probiers mal aus:

Code: Alles auswählen

		int test;
		
		test = 3/2.0;

Antworten

Zurück zu „Archiv“