Feedback

C# - Wurzel und Potenz berechnen ohne Math-Klasse

Veröffentlicht von am 15.01.2012
(2 Bewertungen)
Mit dieser Formel kann eine beliebige n-Wurzel aus einer beliebigen Zahl gezogen werden, ohne die Math-Funktion SQRT und ohne Schleife (bei Wurzel ziehen .. Basis-Methode).

Mit der zweiten Funktion wird potenziert, ebenfalls ohne Math-Funktion POW.
// Berechnet die Wurzel (Basis-Wert)
public static double Basis(double num, double Potenz)
{
    return Pow(num, 1 / Potenz);
}

// Potenziert eine Basis-Zahl um eine beliebige Potenz
public static double Pow(double basis, double exp)
{
    // val = Ergebnis (Erste = 1)
    // r = Gesamtschritt, beginne beim ersten (Erste = Schritt 1)
    // step = Schrittweite
    // step ist der kleinere Wert zwischen 0 und 1 (Immer zw. 0 und 1)

    // Initialisierung der Variablen
    double     
         val = 1, 
         r = 0,
         step = ((exp - r) < 1 ? (exp - r) : (1));

    // den nächsten Schritt machen
    r += step;

    // Solange die Potenz nicht erreicht ist rechne weiter
    while (r <= exp)
    {
       // multipliziere das Ergebnis mit diesem Schrittwert zur Basis
       val *= step * basis;

       // Berechne die nächste Schrittweite (kleinerer Wert zwischen 0 und 1)
       step = exp - r < 1 ? exp - r : r;

       // Wenn der Potenzwert erreicht ist, beende die Berechnung, keine weiteren Schritte nötig
       if (step == 0) break;

       // Schritt machen
       r += step;
    }

    // Gib das Ergebnis zurück
    return val;
}
Abgelegt unter Wurzel, Basis, Math, Potenz.

3 Kommentare zum Snippet

NicoMcF schrieb am 22.02.2012:
Durch das Aufrufen der Methode Pow nutzen Sie eine Schleife.
ECreators schrieb am 06.03.2012:
Danke
andro schrieb am 06.03.2018:
Der Code liefert falsche Ergebnisse.

Für Basis 2 und Exponent 16 liefert er das Ergebnis 2048.
Die Potenz von 2 hoch 16 ist aber 65536.
 

Logge dich ein, um hier zu kommentieren!