Re,
Dès qu'on s'intéresse au puissance supérieure à 1, par exemple (-2)^(5/3) [qui pose encore problème sous VBE] mon algo précédent n'est pas adapté. La solution que j'ai trouvé consiste à décomposer l'exposant en partie entiere+décimale. Ainsi : (-2)^(5/3) = ((-2)^5)^(1/3) = (-32)^(1/3) = -3,1748021039364...
Voici algorithme complet testé pour tous les exposants cette fois :
Function Puiss(Nb As Double, Expo As Double) As Double
' FONCTION EXPOSANT TENANT COMPTE DES D'ARGUMENTS TEL QUE (-2)^(1/3) ou (-2)^(5/3) SANS ERREUR
'Paramètres
Dim A As Double
Dim B As Double
Dim P As Double
Dim E As Double
Dim C As Double
Dim D As Double
Dim G As Double
Dim H As Double
P = 10 ^ -15
'Algo décomposition Expo
A = Int(Expo)
E = Int(Expo)
B = 1
C = 1
D = 0
G = Expo
While Abs(Expo - A / B) > P
G = 1 / (G - E)
E = Int(G)
H = A * E + C
C = A
A = H
H = B * E + D
D = B
B = H
Wend
'Calcul exposant entier
Nb = Nb ^ A
'Calcul exposant decimal
If Abs(1 / B) < 1 And (B And 1) Then
Puiss = Sgn(Nb) * Abs(Nb) ^ (1 / B)
Else
Puiss = Nb ^ (1 / B)
End If
End Function
Sub es()
Debug.Print Puiss(-2, 1 / 3) '-1,25992104989487
Debug.Print Puiss(-2, 5 / 3) '-3,1748021039364
Debug.Print Puiss(-2, -5 / 3) '-0,314980262473718
End Sub
Amicalement,
Us.