# Funktion implementieren



## schlelia (14. Nov 2021)

Hallo,
ich muss folgende Funktion (innerhalb einer größeren Aufgabe) implementieren : F(x) = x^n - a.

```
public static double power(double x, int n) {
        double sol = x;
        for (int i = 1; i < n; i++) {
           sol = sol * x;
        }
        return sol;
    }
    public static double function(double x, int n, double a) {
        return (power(x,n)) - a;
    }
```
Ich hab die dann einfach so implementiert. Power ist einfach die Potenzfunktion statt Math.pow().
Das hier ist der Test dazu:

```
@Test(timeout = 666)
    public void pubTest_function() {
        for (int pass = 0; pass < 42; pass++) {
            double x = 666.0815 + RND.nextDouble() * 4711;
            int n = 2 + RND.nextInt(42);
            double a = 666.0815 + RND.nextDouble() * 4711;
            double other = NewtonIteration.derivedFunction(x, n, a);
            double actual = NewtonIteration.function(x, n, a);
            assertEquals(NewtonIterationPublicTest.EX_function + "(" + x + ", " + n + ", " + a + ")", other * x / n - a, actual, (other * x / n - a) * 1e-12);
        }
        double actual = NewtonIteration.function(0.815d, 42, -0.665814382223034268d);
        assertEquals(NewtonIterationPublicTest.EX_function + "(0.815d, 42, -0.665814382223034268d)", 0.666d, actual, 1e-12);
```

Bei den eingesetzten Werten (1403.8448884058157, 5, 1373.8992853720163) kommt z.B. bei mir 5.452499382183306E15 raus. Es soll aber 1969406.5714177652 rauskommen. Was mache ich falsch?


----------



## kneitzel (14. Nov 2021)

schlelia hat gesagt.:


> Es soll aber 1969406.5714177652 rauskommen


Wie kommst Du auf die Idee? Das ist definitiv falsch.

Du hast ja ein 1.403 * 10^3 Wert. Der dann hoch 5 bedeutet, dass da ein Wert mit 10^15 rauskommen muss. Davon etwas abziehen, das 4 Stellen hat: Kann man also vernachlässigen.

Da wird also niemals ein Ergebnis raus kommen in der Größenordnung 10^7

Du rechnest die angegebene Formel richtig aus, Die Werte scheinen stimmig (ohne nachgerechnet zu haben). und wenn ich den erwarteten Wert anschaue, dann kann der gar nicht stimmen!


----------



## schlelia (14. Nov 2021)

kneitzel hat gesagt.:


> Wie kommst Du auf die Idee? Das ist definitiv falsch.
> 
> Du hast ja ein 1.403 * 10^3 Wert. Der dann hoch 5 bedeutet, dass da ein Wert mit 10^15 rauskommen muss. Davon etwas abziehen, das 4 Stellen hat: Kann man also vernachlässigen.
> 
> ...


MMh. Aber der Test schlägt trotzdem fehl


----------



## schlelia (14. Nov 2021)

kneitzel hat gesagt.:


> Wie kommst Du auf die Idee? Das ist definitiv falsch.
> 
> Du hast ja ein 1.403 * 10^3 Wert. Der dann hoch 5 bedeutet, dass da ein Wert mit 10^15 rauskommen muss. Davon etwas abziehen, das 4 Stellen hat: Kann man also vernachlässigen.
> 
> ...


Also die ganze Aufgabe ist eigentlich das Newtonverfahren anzuwenden für die nte Wurzel aus a.


----------

