SEO-Software von Suchmaschinenoptimierung.de

Wurzel/Potenz-Befehle

(hier klicken, um zum Original Thread zu gelangen)
Solic
Hallo,
ich stehe vor folgendem Problem:
ich versuche eine zahl hoch 1/3 zu rechnen (10^(1/3)) bzw. die dritte wurzel zu ziehen, also habe ich diesen befehl : Math.pow(zahl,(1/3)); benutzt. Nur kommt dann immer 1 raus. Mache ich aber aber Math.pow(3,(6/3)); kommt das richtige ergebnis 9 raus. Woran könnte das liegen oder wie zieht man mit Math.sqrt die dritte wurzeln ?
Danke für eure Hilfe !
artemis_TOAO
liegt event. daran, dass 1/3 erst in einem integer umgewandelt wird (also dann 0) und erst danach die funktion benutzt wird.
Solic
Wie kann ich nun das problem lösen :S ??
artemis_TOAO
sry meine java kenntnisse sind sehr beschränkt - es war auch eher eine vermutete mögliche ursache.
Fundiert kann ich hier nichts sagen Augenzwinkern
Donut
probier ma

code:
1:
Math.pow((double) zahl, (double) (1/3));
Vampire
Zitat:
Woran könnte das liegen oder wie zieht man mit Math.sqrt die dritte wurzeln ?

sqrt = square root also Quadratwurzel, damit kannst du nur die Quadratwurzel ziehen und keine andere.


Zitat:
liegt event. daran, dass 1/3 erst in einem integer umgewandelt wird (also dann 0) und erst danach die funktion benutzt wird.

Erst umgewandelt ist nicht ganz korrekt. Es gibt sozusagen 2 Operatoren "/".
Sind die beiden Operanden Integerwerte ist es eine ganzzahlige Division mit einem Integer als Ergebnis. Der Rest dieser Division kann mit Modulo "%" berechnet werden.
Ist einer der Operanden eine Fließkommazahl, dann ist es eine Fließkommadivision mit dem korrekten Ergebnis als Ergebnis.


Zitat:
Math.pow((double) zahl, (double) (1/3));

Das funkioniert genausowenig. Wer was ich im letzten Absatz geschrieben hab verstanden hat, der weiß warum. :-)
(double) (1/3) macht zuerst die Division 1/3 was wieder eine ganzzahlige Division ist und somit 0 als Ergebnis hat. Diese 0 wird danach auf double gecastet. Und somit gehts wieder in die Hose.


Zitat:
Wie kann ich nun das problem lösen :S ??

code:
1:
Math.pow(zahl,((double)1/3));

oder
code:
1:
Math.pow(zahl,(1/(double)3));

bzw.
code:
1:
Math.pow(zahl,(1.0/3);

oder
code:
1:
Math.pow(zahl,(1/3.0);


sollten funktionieren. Hierbei wird erst die 1 bzw. die 3 auf eine Fließkommazahl gecastet, bzw. gleich eine Fließkommazahl verwendet. Dadurch ist das Ergebnis der Division auch eine Fließkommazahl mit dem korrekten Ergebnis. :-)
Wenn möglich würde ich Variante 3 oder 4 empfehlen, ich denke es ist performanter wenn gleich ein double verwendet wir, als wenn erst gecastet werden muss.

Gruß,
Vampire
(hier klicken, um zum Original Thread zu gelangen)



Tipp: Ranking-Konzept.de - Das SEO-Forum (Forum rund um die Suchmaschinenoptimierung) der artaxo AG.
Das große Versicherungs ABC von Versicherung.de - mit allen Aspekten der Computerversicherungen!
Fan-Foren.de, die große Community mit Musikforum ist ab sofort online.