Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1220to1224
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Laufzeitfehler 5 bei Test mit 10.000k Runs

Laufzeitfehler 5 bei Test mit 10.000k Runs
Christos
Hallo liebe VBAler,
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

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Benutzer
Anzeige
Randomize Timer
30.06.2011 19:31:15
ransi
HAllo
ICh denke das hängt mit dem Zufallsgenerator zusammen.
K.A. warum.
Wenn du ihn immer neu initialisierst läuft der Code durch.
Public Sub machs()
    MsgBox simul_exercise3(100000000)
End Sub


Function nrand(Optional ByVal dbl_my As Double = 0, Optional ByVal dbl_sigma As Double = 1) As Double
    
    Dim dbl_nrand As Double
    '#####
    Randomize Timer
    '#####
    dbl_nrand = Cos(2 * PI * Rnd()) * Sqr(-2 * Log(Rnd()))
    
    nrand = dbl_my + dbl_sigma * dbl_nrand
    
End Function


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
    ' On Error GoTo myErrorhandle
    For dbl_index = 1 To dbl_n 'Step 100
        
        dbl_rnd = nrand()
        dbl_sum = dbl_sum + 3 * dbl_rnd ^ 2 - 2 * dbl_rnd + 10
        
    Next dbl_index
    
    simul_exercise3 = dbl_sum / dbl_n
    'myErrorhandle:
    'MsgBox Err
End Function


ransi
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige