Feedback

VB - Quadratwurzel ohne Sqrt() Funktion ziehen

Veröffentlicht von am 14.11.2006
(4 Bewertungen)
Nun ich weiß das es bereits eine Funktion zum Wurzeln ziehen im Framework gibt aber ich wollte es auch als eigene Funktion veröffentlichen damit man sehen kann wie das ganze funktioniert.
Public Function SquareRoot(ByVal Expression As Double) As Double
    Dim Number As Double = 1
    Dim Tmp As Double = 0

    For i As Long = 1 To CLng(Expression)
        Number = 0.5 * (Number + (Expression / Number))
        If Tmp = Number Then Return Number
        Tmp = Number
    Next
    Return Number
End Function
Abgelegt unter Wurzel, Mathe.

2 Kommentare zum Snippet

Günther Foidl schrieb am 25.09.2008:
Aus numerischer Sicht ist ein Vergleich mit = bei Gleitkommazahlen nicht unproblematisch - aufgrund der ungenauen Darstellung dieser Zahlen.

Besser wäre ein Vergleich der Art:

If (Abs(Tmp - Number) < epsilon) Then Return Number

wobei epsilon für die Maschinengenauigkeit steht.
Siehe auch http://dotnet-snippets.de/dns/maschinengenauigkeit-SID961.aspx
Harper schrieb am 11.12.2008:
Public Function SquareRoot(ByVal Expression As Double, ByVal Potenz as Byte) As Double
Dim Number as Double
Number = Expression ^ (1/Potenz)
Return Number
End Function

Ich habs mal umgeschrieben, weil es sich für Wuzelooperationen einfach gut macht ;)

Eine Wurzel ist nichts anders als eine umgekehrte Potenzierung, also muss die Potenz nur negiert werden, dabei gilt, eine Potenz von 1 gibt den natürlichen Wert zurück, während Potenzen < 1 und > 0 die Wurzel darstellt. Somit hast Du nun eine klitze kleine Funktion und fundamentales mathematisches Wissen, um alle Potenzaufgaben zu lösen.

Harper
(Kryptographischer Wahnsinn in Zahlen und Worten)
 

Logge dich ein, um hier zu kommentieren!