# Schnelles Potenzieren



## Vanessa_X (17. Nov 2010)

Abend zusammen!

Ich habe folgendes Problem: Ich soll eine Java-Datei erstellen, die schnell potenziert, und das ganze allerdings ohne Math-Methode.

ich hab den folgenden Beitrag dazu schon gefunden: http://www.java-forum.org/java-basics-anfaenger-themen/84284-potenzen-ohne-math-pow.html

nur leider kann ich das in meinen Rahmen nicht einbringen..

das Mathematische mit dem Schnellen Potenzieren ist mir schon klar, aber wie sag ich Java jetzt, was ich möchte? 

Vielen Dank im Voraus!
Vanessa


----------



## mabuhay (17. Nov 2010)

Vanessa_X hat gesagt.:


> das Mathematische mit dem Schnellen Potenzieren ist mir schon klar, aber wie sag ich Java jetzt, was ich möchte?



Kennst du dich denn in Java aus? +, -, /, *, schlaufen... das alles kann eine Programmiersprache, auch Java, ja, mit dem kannst du es realisieren... Oder wo stehst du an?

mfg


----------



## SlaterB (17. Nov 2010)

bevor du Java was sagen kannst musst du es auf Papier ausrechnen und in Worten beschreiben können 
(und nicht 'ich rechne 5^7' sondern wirklich Schritt für Schritt)

ein anderer gerade aktueller Link ist noch
http://www.java-forum.org/hausaufgaben/108915-probleme-shift-operatoren.html
das Programm dort ist vielleicht nicht besonders toll, der Link zu Wikipedia ist aber brauchbar und halbwegs ist dieses Verfahren umgesetzt,
die Programme in deinem Link sind besser,
schreib sie ab, stell Fragen dazu, was auch immer, aber nur 'ich versteh nix', so gehts kaum voran

> nur leider kann ich das in meinen Rahmen nicht einbringen..

inwiefern, wie definiert sich dein Rahmen?


----------



## Vanessa_X (17. Nov 2010)

ich bin Java-Anfängerin - die Basics sind eigentlich vorhanden, nur das Umsetzen macht mir Probleme.
Ich würde total gerne eine "richtige" Frage stellen, aber im Moment weiß ich noch nicht wie ich anfangen soll.


```
public static long potenziere(int x, int n, int k) {
    long result = x;
      
    
    
      
    return result;
```

soweit bin ich bis jetzt. Die Main-Methode habe ich auch schon. (n ist übrigens mein Exponent)
ich hatte auch schon die Idee, eine Fakultät bei n einzubauen.
und ich möchte Boolesche und Shift-Operatoren mit einfügen.
ich weiß, ich weiß, meine "Fragestellung" ist nicht gerade antwortfreundlich, aber ich weiß nicht, wie ichs direkter formulieren könnte. Mir fehlt einfach der Anfangsstupser.


----------



## SlaterB (17. Nov 2010)

wie kommst du denn auf die Parameter
> int x, int n, int k
ist das vom 'Probleme mit den Shift-Operatoren'-Link?
dann kopiere das Programm von dort oder idealerweise das von Posting-Direkt-Link
http://www.java-forum.org/java-basics-anfaenger-themen/84284-potenzen-ohne-math-pow.html#post583089
wenn dir Rekursion nicht gefällt kann man das auch in eine Schleife umändern,

wieso der jeweilige Code so geschrieben ist wie er ist, kann nun wirklich kaum jemand erklären,
erkläre mal einen Kind wie man ein Haus auf einer Wiese malt..,
einfach machen (wochenlang ausprobieren) oder sein lassen,
als Anfänger ist 'Schnellen Potenzieren' auch nicht das leichteste Thema, wahrscheinlich sind vorher andere Aufgaben besser
(wieder Vergleich mit Zeichnen: nur einen Kreis oder einen Strich malen)


----------



## KYL3R (17. Nov 2010)

Was passt an :

```
public static double pow(double d, int i) {
    double v = d;
    for (int j = 1; j < i; j++) {
        v *= d;
    }
    return v;
}
```
nicht in deinen Rahmen ? Das ist eine simple for-schleife (grundlegene programmierung) die anstatt beispielsweise 7^3 einfach 7*7*7 rechnen, genau das, was eben potenzieren ist. 
Das wollte ich gerade posten, aber ein Blick in den thread zeigte, dass es das bereits gibt.


----------



## mabuhay (17. Nov 2010)

Hallo

Brauchst du das denn einfach als Übung oder solls wirklich möglichst schnell sein? Wenn zweiteres zutriffst musst du erst mal (nachdem du ein wenig Java mit diversen operationen und schleifen etc geübt und getestet hast) recherchieren welche Operationen welchen in punkto Geschwindigkeit vorzuziehen sind... und dann irgendwelche benchmarks durchführen und mit der Math.pow() vergleichen.

mfg


----------



## Marco13 (18. Nov 2010)

KYL3R hat gesagt.:


> Was passt an :...nicht in deinen Rahmen ?



Ob man bei 5^10000000 nun 10000000 Multiplikationen macht, oder grob log2(10000000) ist schon ein Unterschied


----------



## Andi_CH (18. Nov 2010)

Vanessa_X hat gesagt.:


> ich bin Java-Anfängerin - die Basics sind eigentlich vorhanden, nur das Umsetzen macht mir Probleme.
> Ich würde total gerne eine "richtige" Frage stellen, aber im Moment weiß ich noch nicht wie ich anfangen soll.
> 
> 
> ...



Dann sag ihm auch Exponent (Einbuchstabenvariablen sind ein Tabuthema (ok, ausser in for - schleifen)

Was soll der dritte Parameter?


```
public static long potenziere(int x, int exponent, int k) {
    long result = x;
      
    return result;
```


----------



## cRacKheAd (19. Nov 2010)

man könnte die variablen auch so nennen: x = basis, n = exponent, k = gueltigeZiffernExponentBinary
halte ich für vercrackt...


```
public static long potenziere(int x, int n, int k) {
    long result = x;  
	int _x = 1;
      for (int i =0; i<=k;i++){
	
	if (i-te Stelle von n == 1){_x = _x * _x * x; result = _x;}
	else {_x = _x * _x; result = _x;}
	}
      
    return result;   
  }
```

jetzt ist nur noch die Frage, wie du rauskriegst, ob die i-te Stelle  von n in binär ne 1 oder ne 0 ist...


----------



## mabuhay (19. Nov 2010)

cRacKheAd hat gesagt.:


> jetzt ist nur noch die Frage, wie du rauskriegst, ob die i-te Stelle  von n in binär ne 1 oder ne 0 ist...



Mit binären Operationen (and/or/shift)
Also z.B. Test auf 5. Bit: Mit and-Operator alle anderen Bits mit Maskieren auf 0 setzen, und dann Test ob Resultat = 16 ist. Oder dann noch um 4 Bit nach rechts schieben und testen ob Resultat = 1 ist.

mfg


----------

