|
Zur Umkehrung einer Potenzrechnung braucht es in Visual Basic eigentlich keine spezielle Funktion. Sie können die n-te Wurzel aus einer gegebenen Zahl im Prinzip mit dem Potenz-Operator "^" berechnen, indem Sie als Exponenten den Kehrwert der Wurzel setzen:
Basis = Zahl ^ (1 / Wurzel)
Allerdings sind ein paar Besonderheiten und Ausnahmefälle zu berücksichtigen. Etwa wenn die gegebene Zahl negativ ist, kann sie nur zustande gekommen sein, wenn die Basis negativ und der Exponent eine positive ungerade Zahl waren (auf Ausflüge in die Welt der komplexen Zahlen verzichten wir hier für den Alltagsgebrauch). Weiterhin kann die "nullte" Wurzel nur ermittelt werden, wenn die gegebene Zahl gleich 1 ist - denn der Exponent 0 ergibt zu jeder Basis 1. Bei einer Basis gleich 0 ist der Exponent fast egal: Das Ergebnis ist immer 0 - jedoch kann Visual Basic über die oben stehende Formel keine negative Wurzel aus 0 ziehen.
Die folgende Funktion AnyRoot berücksichtigt diese Ausnahmebedingungen und löst gegebenenfalls einen Laufzeitfehler aus:
Public Enum AnyRootErrorConstants
ErrRootZero = 10001
ErrNumberZeroNegativeRoot = 10002
ErrNegativeNumberEvenRoot = 10003
End Enum
Public Function AnyRoot(ByVal Number As Double, _
ByVal Root As Double) As Double
If Root = 0 Then
Err.Raise ErrRootZero
Else
Select Case Sgn(Number)
Case 0
Select Case Sgn(Root)
Case -1
Err.Raise ErrNumberZeroNegativeRoot
Case 1
AnyRoot = 0
End Select
Case 1
AnyRoot = Abs(Number) ^ (1 / Root)
Case -1
If Root > 0 Then
Select Case (Abs(Root) And 1)
Case 0
Err.Raise ErrNegativeNumberEvenRoot
Case 1
AnyRoot = -(Abs(Number) ^ (1 / Root))
End Select
Else
AnyRoot = -(Abs(Number) ^ (1 / Root))
End If
End Select
End If
End Function
|