Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: 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
Anzeige

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
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige