Function AleaStable(Optional ByVal Alpha As Variant = 2, Optional ByVal Gamma As Variant = 1 / 2 ^ 0.5, Optional ByVal Mu As Variant = 0, Optional ByVal Beta As Variant = 0)
'Calcul d'un nombre aléatoire suivant une loi alpha stable
'Formules de Chambers, Mallows, Stuck

'Traitement des paramètres
Alpha = CDbl(Alpha)
Gamma = CDbl(Gamma)
Mu = CDbl(Mu)
If Beta < -1 Or Beta > 1 Then AleaStable = "#BETA!": Exit Function
Beta = CDbl(Beta)

'Définition des variables
Dim V As Double, W As Double, A1 As Double, X As Double
Dim A As Double, B As Double, C As Double

'génére une variable uniforme V entre -pi et +pi
    V = (4 * Atn(1)) * Rnd - 2 * Atn(1)

'W=-ln(1-U )
    W = -Log(1 - Rnd)
    
'Cacul S(alpha,1,beta,0)
    A1 = 1 / Alpha
    C = Beta * Tan(2 * Atn(1) * Alpha)
    A = (C ^ 2 + 1) ^ (A1 / 2)
    B = Atn(C) * A1
    X = A * (Sin(Alpha * (V + B)) / (Cos(V) ^ A1)) * (Cos(V - Alpha * (V + B)) / W) ^ (A1 - 1)

'Calcul S(alpha,gamma,beta,mu)
    AleaStable = Gamma * X + Mu

End Function