Laufzeitfehler 5 bei Test mit 10.000k Runs
Christos
ich habe ein Problem mit folgender Funktion:
Public Const PI = 3.14159265358979
' Function: Return a normally distributed random variable
' Input: dbl_my = expected value (optional)
' dbl_sigma = standard deviation (optional)
' Algorithm: Box-Muller
' Author: Christopher Scherer
' Date: 06/29/2011
' Changes: -
Function nrand(Optional ByVal dbl_my As Double = 0, Optional ByVal dbl_sigma As Double = 1) As _
_
_
Double
Dim dbl_nrand As Double
dbl_nrand = Cos(2 * PI * Rnd()) * Sqr(-2 * Log(Rnd()))
nrand = dbl_my + dbl_sigma * dbl_nrand
End Function
Sie generiert auf Basis des Box-Muller-Algorithmus eine normalverteilte Zufallsvariable. Diese _ Funktion wird wiederum von einer anderen aufgerufen, die die erzeugte Zufallsvariable in eine Funktion einsetzt und daraus den Erwartungswert der Funktion für die normalverteilte Zufallsvariable ermittelt:
'Exercise 3: Simulation of expected value for a normally distributed random variable
'This function simulates the expected value by summarizing the results of the n calculations of _
_
_
the equation g(y) = 3y² - 2y + 10
'and dividing the sum by n
Function simul_exercise3(ByVal dbl_n As Double) As Double
Dim dbl_rnd As Double
Dim dbl_index As Double
Dim dbl_sum As Double
For dbl_index = 1 To dbl_n
dbl_rnd = nrand()
dbl_sum = dbl_sum + 3 * dbl_rnd ^ 2 - 2 * dbl_rnd + 10
Next dbl_index
simul_exercise3 = dbl_sum / dbl_n
End Function
Beides funktioniert prima bis Werte von 1 Mio (habe nur Zehnerintervalle getestet), das Problem _ entsteht erst, wenn ich der oben stehenden Funktion ein dbl_n von 10 Mio oder 100 Mio übergebe. Sowohl in einer Excelzelle stehend als auch mit einer Routine die die Funktion mit einer Schleife wiederholt aufruft stoppt für beide Werte das Programm mit dem Laufzeitfehler 5 und markiert in der nrand-Funktion die folgende Zeile:
dbl_nrand = Cos(2 * PI * Rnd()) * Sqr(-2 * Log(Rnd()))
Interessant ist dabei, dass dieser Fehler immer für denselben Wert für dbl_index kommt, nämlich 3244032. Der Wert für die Summe dbl_sum war beim letzten Durchlauf 42160233,9385908, also auch im Rahmen der Double-Variable.
Tipps wie Neustart von Excel und/oder PC und Neuanlegen des Moduls haben leider nicht geholfen, deswegen meine Frage an die Forengemeinde.
Danke für die Hilfe
Christos