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