2016-05-12 8 views
-6

Ich möchte als Schleife wie verwenden: Beispiel Ich putted in Textfeld 123 und 300 in meiner Formel.C# Logik (Lösung in der Codierung benötigt)

1/2 * (300 + 123/300) = 150,205 >> Antwort

i Schleife will dieses Beispiel i 150,205 nächste Formel Antwort bekam sollte wie folgt

aussehen wird 1/2 * (150.205 + 123/150.205) = 75.512

die Antwort dieser Gleichung möchte ich nächste Formel durch Schleife einfügen.

Ich habe Code geschrieben, aber ich weiß nicht, wie es

über die Schleife verwenden

Mein Code.

double value = (0.5 * (300 + 123/300)); 

=======================================

für End-Schleife

Wenn Bedingung Spiel wie diese 1/2 * (11,091 + 123/11,091) = 11,091 Bedeutung Antwort und Eingang, wo im 300 setzt gleiche seiner i-Schleife

**Example** I want to do this without using square root function in c# 
    like simple if i want a root of 9 it will be 3 so it will be like this . 
    i choosen 1 Because 9 is one value so i choosen 1 
    1/2*(1+9/1) = 5.000 
    1/2*(5+9/5) = 3.400 
    1/2*(3.4+9/3.4) = 3.024 
    1/2*(3.024+9/3.024) = 3.000 
    1/2*(3+9/3) = 3.000 
    see you will get same value in one point always 
+0

wann möchten Sie die Schleife stoppen? – PaulF

+2

Komm schon, Jonny, du kannst noch mehr ausprobieren, bevor du um Rat gefragt hast. –

+0

Wenn Bedingung übereinstimmen wie diese = 1/2 * (11.091 + 123/11.091) Bedeutung Antwort und Eingabe, wo ich Put 300 wird gleich sein Ich möchte Schleife zu brechen – Jonny

Antwort

1

brechen will Die einzige knifflige Sache hier ist ein Vergleich mit Toleranz, da wegen Fehler aufrunden Sie können gut nie treffen

answer == value 

Zustand. Die Umsetzung könnte

seine
double answer = 300.0; 
    double tolerance = 1e-10; 

    while (true) { 
    // based on previous answer we compute next one 
    double value = 0.5 * (answer + 123.0/answer); 

    //TODO: you can print out steps here, if you want something like this 
    //Console.WriteLine(value); 

    // check convergence with tolerance 
    if (Math.Abs(answer - value) <= tolerance) { 
     answer = value; 

     break; 
    } 

    // next answer (value) becomes the previous one (answer) 
    answer = value; 
    } 

    // 11.0905365064094 
    Console.Write(answer); 

Die eigentliche Antwort (beweist es) ist nur eine Quadratwurzel:

// 11.09053650640941716205160010261... 
    Console.Write(Math.Sqrt(123)); 

wirkliches Leben Implementierung (wenn mein Chef will, dass ich es implementieren):

public static double NewtonEstimation(Func<double, double> function, 
             double tolerance = 1e-10, 
             double guess = 1.0) { 
    if (null == function) 
    throw new ArgumentNullException("function"); 
    else if (tolerance < 0) 
    throw new ArgumentOutOfRangeException("tolerance", "tolerance must not be negative"); 

    while (true) { 
    double value = function(guess); 

    if (Math.Abs(value - guess) <= tolerance) 
     return value; 

    guess = value; 
    } 
} 

... 
// 11.0905365064094 
Console.Write(NewtonEstimation(x => 0.5 * (x + 123/x))); 
+0

@Jonny: Ich sehe, Quadratwurzel, * Newton-Methode *; https://en.wikipedia.org/wiki/Newton%27s_method –

+0

Meine Frage ist auch eine grobe Schätzung Methode, die ich frage :) Aber wenn Sie möchten können Sie lösen in der Programmierung C# Newton-Methode, die ich schätzen werde, wenn Sie kann es lösen – Jonny

+0

Großer Herr Dmitry Bychenko sein Arbeiten – Jonny