Overflow (erreur N°6) sur méthode de box-muller/monte-carlo

Overflow (erreur N°6) sur méthode de box-muller/monte-carlo - VB/VBA/VBS - Programmation

Marsh Posté le 20-10-2012 à 15:40:04    

Bonjour à tous,
 
Voilà mon soucis,
 
Je tente d'appliquer la formule de Box-Muller, mais mon programme indique systématiquement "Overflow" au delà de la 2499ème itération.
Je ne comprends pas pourquoi ? la limite d'un variant est bien au delà de ça normalement, non ?
Tout fonctionne très bien tant que je fais moins de 2499 itérations, une idée ? (je souhaiterais faire un millions d'itération dans l'idéal...)
 
Voici le code :
 
Sub MonteCarlo()
Dim S0 As Single
Dim T As Integer
Dim k As Single
Dim r0 As Single
Dim sigma As Double
Dim mu As Double
Dim ite As Long
Dim x1 As Variant
Dim x2 As Variant
Dim boxmul As Variant
Dim payof As Variant
 
 
Set ws1 = ThisWorkbook.Worksheets("Black-Scholes" )
 
 
SO = ws1.Range("S0" ).Value
T = ws1.Range("T" ).Value
k = ws1.Range("k" ).Value
r0 = ws1.Range("r0" ).Value
sigma = ws1.Range("sigma" ).Value
mu = ws1.Range("mu" ).Value
ite = ws1.Range("ite" ).Value
 
ReDim x1(ite, 1)
ReDim x2(ite, 1)
ReDim boxmul(ite, 1)
ReDim payof(ite, 1)
 
For i = 1 To ite
 
x1(i, 1) = Rnd()
x2(i, 1) = Rnd()
boxmul(i, 1) = (((-2) * WorksheetFunction.Ln(x1(i, 1))) ^ (1 / 2)) * Cos(2 * Pi * x2(i, 1))
 
ws1.Range("J1" ).Offset(i, 0).Value = boxmul(i, 1)
ws1.Range("J1" ).Offset(i, 1).Value = "1"
 
Next i
 
End Sub¸
 
 
 
Merci d'avance de votre aide ! :D

Reply

Marsh Posté le 20-10-2012 à 15:40:04   

Reply

Marsh Posté le 20-10-2012 à 20:18:02    


Problème résolu en mettant sqr (....)  à la place de (....)^(1/2).
Si quelqu'un a une explication je suis preneur.
 
 
Marche Pas:

Code :
  1. boxmul(i, 1) = (((-2) * WorksheetFunction.Ln(x1(i, 1))) ^ (1 / 2)) * Cos(2 * Pi * x2(i, 1))


Marche:

Code :
  1. boxmul(i, 1) = (Sqr((-2) * WorksheetFunction.Ln(x1(i, 1)))) * Cos(2 * Pi * x2(i, 1))

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed