Hallo,
hier ist mal wieder ein Java-Anfänger der Hilfe sucht
Also, folgende Aufgabenstellung:
Es geht um das "schnelle Potenzieren", siehe auch Binäre Exponentiation ? Wikipedia
Im Grunde geht man dabei folgendermaßen vor:
1. den Exponenten als Binärzahl hinschreiben
2. die Variable result gleich x (der Basis der zu berechnenden Potenz) setzen
3. ab der ersten Eins an Bit für Bit auslesen
a) falls das Bit = 1 ist, result = result*result (also result quadriert)
b) falls das Bit = 0 ist, result = result*x
Man soll nun eine Methode erstellen, die die Potenz berechnet. Problem dabei: es dürfen innerhalb der Methode keine weiteren Methoden aufgerufen werden.
Soweit bin ich bis jetzt gekommen:
Mein Ansatz wäre, dass man die Binärzahl soweit verschiebt, dass die erste Eins auf Bit 1 von 32 liegt. Dann wird angefangen auszulesen, ob die Zahl positiv oder negativ ist, da das erste Bit ja das Vorzeichen der Zahl angibt.
In der jetzigen Form wirft mir das Programm recht schnell n=0 hin, obwohl die Binärzahl noch nicht komplett durchgeschoben wurde.
Sieht jemand einen groben Fehler oder hat jemand Tips für mich?
Viele Grüße,
hier ist mal wieder ein Java-Anfänger der Hilfe sucht
Also, folgende Aufgabenstellung:
Es geht um das "schnelle Potenzieren", siehe auch Binäre Exponentiation ? Wikipedia
Im Grunde geht man dabei folgendermaßen vor:
1. den Exponenten als Binärzahl hinschreiben
2. die Variable result gleich x (der Basis der zu berechnenden Potenz) setzen
3. ab der ersten Eins an Bit für Bit auslesen
a) falls das Bit = 1 ist, result = result*result (also result quadriert)
b) falls das Bit = 0 ist, result = result*x
Man soll nun eine Methode erstellen, die die Potenz berechnet. Problem dabei: es dürfen innerhalb der Methode keine weiteren Methoden aufgerufen werden.
Soweit bin ich bis jetzt gekommen:
Java:
public class Potenzieren {
public static long potenziere(int x, int n, int k) {
long result = x; // entspricht zu diesem Zeitpunkt dem x_0 (siehe Angabe)
int verschiebung = 32-k;
n = n << verschiebung;
//System.out.println(n);
for (int i=0; i<k; i++) {
if (n>0) {
result = result * result;
}
else {
result = result * x;
}
n = n << 1;
//System.out.println(n);
//System.out.println(result);
}
return result; // soll hier dem Endergebnis x_k (siehe Angabe) entsprechen
}
public static void main(String[] args) {
int x = Integer.parseInt(args[0]);
int n = Integer.parseInt(args[1]);
int k = Integer.SIZE - Integer.numberOfLeadingZeros(n) - 1;
System.out.println(x + " hoch " + n + " ergibt " + potenziere(x, n, k));
}
}
Mein Ansatz wäre, dass man die Binärzahl soweit verschiebt, dass die erste Eins auf Bit 1 von 32 liegt. Dann wird angefangen auszulesen, ob die Zahl positiv oder negativ ist, da das erste Bit ja das Vorzeichen der Zahl angibt.
In der jetzigen Form wirft mir das Programm recht schnell n=0 hin, obwohl die Binärzahl noch nicht komplett durchgeschoben wurde.
Sieht jemand einen groben Fehler oder hat jemand Tips für mich?
Viele Grüße,