# Potenzen ohne Math.pow()



## Plisso (12. Jun 2009)

Hallo,
wie kann man Potenzen ohne Math.pow() berechnen?
Sitze schon länger dran und komme nicht auf die Lösung.
Wahrscheinlich ist es mal wieder ganz einfach 

Danke


----------



## Wildcard (12. Jun 2009)

7^4 = 7 * 7 * 7 * 7


----------



## Plisso (12. Jun 2009)

So meine ich das nicht. Habe folgenden Code. 
Ich möchte die Potenz eben nur ohne Math.pow () berechnen.


```
public class F {
	public static void main(String[]args) {

		double x=Double.parseDouble(args[0]);
		double N=Double.parseDouble(args[1]);
		double fak=1;
		
		double sum=0;
		
		for (int i=1; i<=N; i++) {
			fak = fak*i;
			double pot=Math.pow(x,i);
				
		sum += pot/fak;
		}
		System.out.println(sum+1);
		
		
		
	}
}
```


----------



## bygones (12. Jun 2009)

also statt Math.pow(2,3) willst du 2 * 2 * 2 etc schreiben...

schleife schreiben und so oft wie die potenz durchlaufen und eine variable immer um die zahl erhoehen....

oder wie ?


----------



## Plisso (12. Jun 2009)

Ja genau.
Ich brauche werte für x^1, x^2, x^3... bis x^n.
Eben nur ohne math.pow.


----------



## faetzminator (12. Jun 2009)

```
public static double pow(double d, int i) {
    double v = d;
    for (int j = 1; j < i; j++) {
        v *= d;
    }
    return v;
}
```


----------



## max40 (12. Jun 2009)

faetzminator hat gesagt.:


> ```
> public static double pow(double d, int i) {
> double v = d;
> for (int j = 1; j < i; j++) {
> ...



Fast gut nur ein Fehler! Den wenn i = 0 ist, darf v nicht d sein sondern muss auf 1 geändert werden!
Weil z.B. 5^0 = 1 und nicht 5!
oder?


----------



## faetzminator (12. Jun 2009)

natürlich ist das korrekt, hatte ich anfänglich auch, aber das ist anscheinend nicht notwendig:


> Ich brauche werte für x^1, x^2, x^3... bis x^n.


----------



## max40 (12. Jun 2009)

ich denke mal das Plisso nur das x^0 vergessen hat zu schreiben!
@Plisso das Beispiel funktioniert nur bei Positiven Exponenten!


----------



## Plisso (12. Jun 2009)

Super, Danke euch.

Brauche auch den Wert für x^0. Habe mich falsch ausgedrückt.
Aber es ist alles okay :toll:

Danke


----------



## Marco13 (12. Jun 2009)

Bei x^1000000 wird das ganze dann aber eine Weile dauern. Schau' dir mal Binäre Exponentiation ? Wikipedia an


----------



## schnosi (24. Nov 2009)

Und wie macht man das ganze mit einer Rekursion? Schleife ist ja simpel, aber das Programm auf rekursiv zu ändern, ist schwieriger... bekomme es nicht hin und würde mich mal gern für die Lösung interessieren. Irgendwer einen Ansatz???


----------



## 0x7F800000 (24. Nov 2009)

```
private static double sq(double x){
		return x*x;
	}
	public static double pow(double base, int exp){
		return exp==0?1:sq(pow(base,exp/2))*(exp%2==1?base:1);
	}
```
wenn das 50 mal gepostet wurde, kommt's in die FAQ^^ :autsch:

Die rekursion an sich funzt erstmal nur für nichtnegative exponenten. Das müsste man vollständigkeitshalber noch ein wenig wrappen...


----------



## schnosi (24. Nov 2009)

vielen dank


----------

