Java n-te Potenz bestimmen

Ken Masters

Lt. Junior Grade
Registriert
Dez. 2006
Beiträge
334
Hallo miteinander,

ich wollte fragen wie man den Logarithmus zur Basis 2 einer ganzzahligen
Zahl ausschliesslich mit Java-Operatoren berechnen kann?

beispiel: ich will von der zahl 8 den log. zur basis 2 ausrechnen.

formel : log2(8) = 3, denn 2 ^ 3 = 8

mit den math.log ist das kein problem. aber gibt es mit eine möglichkeit, eine zahl x (im beispiel die '3') als n-te potenz von 2 nur mit arithmetischen operatoren zu bestimmen?

2 ^ x = eingegebene zahl

wie löse ich denn das auf x auf?? hat jmd. ne idee?

danke im voraus
 
Ne schleife in welcher du einfach hochzaehlst und das ergebnis vergleichst ;) ?

Aber wieso das Rad neu erfinden?
 
reine neugier. :)

habe das am anfang nicht verstanden mit der schleife. jetzt aber glaube ich was du meinst.danke ;)
 
Keine Ursache :)

Hatte am Anfang mit der Programmierung auch meine Probleme das ich immer zu kompliziert gedacht habe...
 
Ken Masters schrieb:
2 ^ x = eingegebene zahl

wie löse ich denn das auf x auf?? hat jmd. ne idee?

Na eben mit: x = log2(eingegebene Zahl) :D

Die Multiplation in ner Schleife iss okay. Brauchst halt noch ne Variable die hochzählt.. das iss dein x / Exponent.
 
leboh schrieb:
2^x = y

heisst

y ist die Zahl die sich x mal durch 2 teilen laesst...

Hmm auch nich schlecht, also eine Schleife in welcher ich immer durch 2 teile und die Anzahl zaehle wie oft ich durch 2 teilen kann und das Ergebnis nicht 0 ist :)
 
habe das nun folgendermaßen gemacht:

int i = Integer.parseInt(JOptionPane.showInputDialog(null, "Bitte eine ganzzahlige Zahl eingeben: "));

int x = 0;

while(true)
{

int i = Integer.parseInt(JOptionPane.showInputDialog(null, "Bitte eine ganzzahlige Zahl eingeben: "));

for (int j = i; j > 1;)
{

j = i/2;
x++;
}

JOptionPane.showMessageDialog(null, "Das Logarithmus von " + i + " zur Basis 2 ist: " + x);

if ( JOptionPane.showConfirmDialog(null, "Möchten Sie weiter machen?") == JOptionPane.NO_OPTION) {
break;
}

j wird so oft geteilt bis es kleinergleich 1 ist. bzw wird dann so oft der wert von x um 1 hochgesetzt. wenn ich aber ausführe und eine zahl eingebe bekomm ich keine rückmeldung. nix....nicht mal ne fehlermeldung. was habe ich falsch gemacht?
 
Das liegt daran, dass du dir eine Endlosschleife gebaut hast. Der Wert von i wird nicht geändert. j=i/2 ist also immer >1 oder direkt beim ersten Durchlauf <=1.

Sinnvoll wäre am Anfang vielleicht auch eine Modulo Abfrage, welche einiges an unnötiger Rechenarbeit ersparen kann.
 
Zurück
Oben