# Cos und Efunktion(e^x)



## Manda (31. März 2007)

Hi leute, 

habe folgende Aufgabe bekommen, mit der ich nicht weiter komme. 

Also Formel ist folgende für die Efunktion(exponential):
e^x = Summenzeichen x^n / n!

Was ich dafür bis jetzt habe:

```
public static double exp(double x)
	{
		double n = 10.0;
		double oben = 1.0;
		double unten = 1.0;
		double temp = 1.0;
		double result = 1.0;
		
		for(double i=1; i<=n; i++)
		{
			oben = Math.pow(x, n);
						
			for(double j=1; j<=n; j++)
			{
				temp *= j;
			}
			unten = temp;
			result = oben / unten;					
		}
		return result;
	}
```
für e^5 kommt 2.46643... aber das stimmt ja nicht. Komme hier nicht weiter. Jemand eine idee?

Und den Cosinus:
cos(x) = Summenzeichen (-1)^n * x^2n+1 / (2n+1)!
Mein Teil bis jetzt:

```
public static double cos(double x) 
	{
		double y = 1.0;
		double unten = 1.0;
		double result = 1.0;
		double n = 10.0;
		
		for(double i=1; i<=n; n++)
		{
			y = Math.pow(-1, n);
			x = Math.pow(x, (2*n));
				
		for(double z=1; z<=2*n; z++)
		{
			unten *= z;
		}
		result = y * x / unten;
		}
		return result;
	}
```
Irgendwie gibt er garnichts aus  Wenn ich mal was ändere ist die Ausgabe meistens "infinity".

Was ich erreichen will, ist einfach nur für 10 zahlen(1-10) die Ausgabe hinzubekommen. Leider  kriege ich die nicht mal für eine hin. Hoffe ihr könnt mir helfen!! 
Danke schon mal


----------



## Thomas Darimont (31. März 2007)

Hallo,



> cos(x) = Summenzeichen (-1)^n * x^2n+1 / (2n+1)!


Das ist doch die Reihenentwicklung für sin(x) ...

schau mal hier:

```
/**
 * 
 */
package de.tutorials;

/**
 * @author Tom
 *
 */
public class MathExamples {

  /**
   * @param args
   */
  public static void main(String[] args) {
    System.out.println(Math.exp(5));
    System.out.println(exp(5));
    
    System.out.println(Math.cos(5));
    System.out.println(cos(5));
    
    System.out.println(Math.sin(5));
    System.out.println(sin(5));
  }

  
  // cos(x) = sum(n=0...inf) { (-1)^n * x^2n / (2n)! } 
  private static double cos(double x) {
    double result = 0.0D;
    for(int n = 0; n <221 ;n++){
      result += Math.pow(-1, n) * Math.pow(x, 2 * n ) / fak(2 * n);
    }
    return result;
  }
  
  // sin(x) = sum(n=0...inf) { (-1)^n * x^(2n+1) / (2n + 1)! } 
  private static double sin(double x) {
    double result = 0.0D;
    for(int n = 0; n <221 ;n++){
      result += Math.pow(-1, n) * Math.pow(x, 2 * n +1 ) / fak(2 * n +1 );
    }
    return result;
  }

  private static double exp(double power) {
    double result = 0.0D;
    for(int n = 0; n <442 ;n++){ // viel größere Werte führen zu NAN (Not a Number) -> Ausweg mit BigDecimal rechnen...
      result += Math.pow(power, n) / fak(n);
    }
    return result;
  }
  
  
  
  static double fak(int n){
    
    if(n < 0){
      throw new Error();
    }
    
    if(n == 0){
      return 1;
    }
    
    double result = 1.0;
    for(int i = 1; i <= n;i++){
      result*=i;
    }
    return result;
  }
}
```

Ausgabe:

```
148.4131591025766
148.41315910257657
0.28366218546322625
0.28366218546322675
-0.9589242746631385
-0.9589242746631357
```

Gruß Tom


----------

