Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1772to1776
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

Überlauffehler 6

Überlauffehler 6
03.08.2020 12:06:23
Angelo
Hallo zusammen,
ich habe ein Makro geschrieben, dass mir über eine Userform ein Modell der Warteschlangentheorie ausrechnet. Leider bekomme ich in der markierten Zeile x = (r ^ k1) / k_fak einen Überlauffehler, obwohl ich extra alles als Variante aufgrund der u.a. großen Zahlen bei Fakultäten deklariere. Bei kleineren Zahlen läuft das Programm wunderbar.

Private Sub btc_canc_Click()
form_data.txt_ankunft.Value = ""
form_data.txt_bedien.Value = ""
form_data.txt_station.Value = ""
form_data.txt_kapaz.Value = ""
Unload Me
End Sub
Private Sub btn_calc_Click()
'Eingabe durch Benutzer auf Plausibilität prüfen
Dim ctrl As Object
For Each ctrl In form_data.Controls
If TypeName(ctrl) = "TextBox" Then
If ctrl.Value = "" Then
MsgBox ("Bite alle Felder ausfüllen!"), vbCritical
ctrl.SetFocus
Exit Sub
ElseIf Not IsNumeric(ctrl.Value) Then
MsgBox ("Bitte nur Zahlenwerte eingeben!"), vbCritical
ctrl.SetFocus
ctrl.SelStart = 0
ctrl.SelLength = Len(ctrl.Text)
Exit Sub
End If
End If
Next
'Werte aus Eingabefeld auslesen
l = CDbl(form_data.txt_ankunft.Value)
m = CDbl(form_data.txt_bedien.Value)
c = CDbl(form_data.txt_station.Value)
n = CDbl(form_data.txt_kapaz.Value)
Dim t As Variant
Dim k_fak As Variant
Dim c_fak As Variant
Dim r As Variant
Dim rc As Variant
Dim c_fak_ind As Variant
Dim y As Variant
Dim x As Variant
Dim k1 As Variant
Dim k2 As Variant
Dim sum1 As Variant
Dim sum2 As Variant
Dim p0 As Variant
'Eingabefeld nach Übergabe leeren
form_data.txt_ankunft.Value = ""
form_data.txt_bedien.Value = ""
form_data.txt_station.Value = ""
form_data.txt_kapaz.Value = ""
'Eingabefeld schließen
form_data.Hide
'Defintion neuer Variablen für weitere Berechnung
t = c - 1       'neue Variable für c-1
k_fak = 1       'Wert für k!
c_fak = 1       'Wert für c!
r = (l / m)       'Auslastung roh
rc = l / (c * m)  'Auslastung in Abhängigkeit von c
c_fak_ind = 1   'Wert für c! unabhängig von Laufvariable
'p0 Übergangswahrscheinlichkeit
For k1 = 0 To t         'Schleife für aufsummieren des Summenzeichens
k_fak = k_fak * k1
If k_fak = 0 Then   'verhindert Division durch 0
k_fak = 1       'definiert 0! = 1
End If
 x = (r ^ k1) / k_fak                    'x = 1. Summenzeichen
sum1 = sum1 + x
Next
'c! ausrechnen und vorbereiten für 2. Summeszeichen
For j = 1 To c
c_fak = c_fak * j
Next
For k2 = c To n         'Schleife für aufsummieren des Summenzeichens
y = (r ^ k2) / ((c ^ (k2 - c)) * c_fak)   'y = 2. Summenzeichen
sum2 = sum2 + y
Next
p0 = (sum1 + sum2) ^ -1
'pn
For i = 1 To c                  'Schleife für c!
c_fak_ind = c_fak_ind * i
Next
pn = p0 * (r ^ n / (c_fak_ind * (c ^ (n - c))))
test = (c_fak_ind * (c ^ (n - c)))
test2 = (r ^ n)
'lw durchsch. Warteschlangenlänge
lw1 = p0 * (((r ^ c) * rc) / (c_fak_ind * ((1 - rc) ^ 2)))
lw2 = 1 - (rc ^ (n - c + 1)) - (1 - rc) * (n - c + 1) * (rc ^ (n - c))
lw = lw1 * lw2      'Formel aufgeteilt aufgrund der Länge
'ae durchsch. Anzahl Elemente im System
ae = lw + r * (1 - pn)
've durchsch. Verweilzeit eines Elements im System
ve = ae / (l * (1 - pn))
'we durchsch. Wartezeit eines Elements
we = ve - (1 / m)
'Datenrückgabe an Tabelle - übergebene Daten
Cells(Cells(Rows.Count, "A").End(xlUp).Row + 1, "A").Value = l
Cells(Cells(Rows.Count, "B").End(xlUp).Row + 1, "B").Value = m
Cells(Cells(Rows.Count, "C").End(xlUp).Row + 1, "C").Value = c
Cells(Cells(Rows.Count, "D").End(xlUp).Row + 1, "D").Value = n
Cells(Cells(Rows.Count, "E").End(xlUp).Row + 1, "E").Value = lw
Cells(Cells(Rows.Count, "F").End(xlUp).Row + 1, "F").Value = ae
Cells(Cells(Rows.Count, "G").End(xlUp).Row + 1, "G").Value = ve
Cells(Cells(Rows.Count, "H").End(xlUp).Row + 1, "H").Value = we
Cells(Cells(Rows.Count, "I").End(xlUp).Row + 1, "I").Value = rc
End Sub

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Überlauffehler 6
03.08.2020 12:50:38
JoWE
Hallo,
halte den Durchlauf des MAkros an dem "end if"-Statement vor der Formel "x = r ^ k1) / k_fak" an und prüfe mal die für die Formel relevanten Variablen zu diesem Zeitpunkt. Vielleicht erkennst Du hier bereits den Fehler.
Gruß
Jochen
AW: Überlauffehler 6
03.08.2020 19:32:19
Angelo
Hallo,
danke für deine Rückmeldung. Die For-Schleife läuft ganz normal bis zum Wert t = 154, dann schmiert es ab. Das deutet doch eindeutig auf die Größe der Zahl hin oder? Die Schleife funktioniert richtig, die Berechnung für kleinere Zahlen ja auch.
Userbild
Anzeige
AW: Überlauffehler 6
03.08.2020 20:01:31
JoWE
Angelo,
ja vielleicht, zuerst hieß es doch der Fehler trat bei x = (r ^k1) / k_fak) auf ?
Hmmm, lade doch Deine Datei oder eine Musterdatei, die den Fehler reproduzierbar zeigen kann hier mal hoch.
Ohne die Daten während der Laufzeit des Makros zu sehen scheint mir die Analyse schwierig.
Für mich jedenfalls unmöglich. Stell dann Deine Frage wieder auf offen.
Gruß
Jochen
Das heisst du hast einen Double Overflow
03.08.2020 20:15:02
EtoPHG
Hallo,
Das Problem ist die Berechnung von r^k1:
mit 198^155 bewegst du dich über die Grenze, die ein Doublewert aufnehmen kann. XL kann schlicht keine so hohen Werte berechnen. 198^154 geht grad noch. Google Gleitkommanarithmetik!
Gruess Hansueli
Anzeige
Falsch:Du bist schon mit 198^154 überm Limit (owT)
03.08.2020 20:22:12
EtoPHG

AW: Falsch:Du bist schon mit 198^154 überm Limit (owT)
05.08.2020 11:12:56
Angelo
Hallo,
anbei die Datei. Ich werde aus der Gleitkommaarithmetik nicht schlau.
https://www.herber.de/bbs/user/139475.xlsm

Gruß Angelo
AW: grössere Zahl als in XL möglich...
05.08.2020 16:57:55
EtoPHG
Hallo Angelo,
Nun ganz einfach, Excel kann nicht mit so grossen Zahlen umgehen.
Die Limiten für eine Zahl sind : 1.7E +/- 308
198^154 ist aber grösser, nämlich: 4.8E +353
Du musst einen anderen Weg, für Deine Berechnungen finden (z.B. Mathematica).
Gruess Hansueli

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige