Microsoft Excel

Herbers Excel/VBA-Archiv

VBA Fehler Überlauf bei Array Berechnung

Betrifft: VBA Fehler Überlauf bei Array Berechnung von: Johann
Geschrieben am: 04.09.2020 10:34:00

Hallo zusammen,

an dieser Stelle erstmal nochmals vielen Dank für eure Hilfe aus dem bereits archivierten Beitrag:
https://www.herber.de/forum/cgi-bin/callthread.pl?index=1779305

Hierdurch konnte ich mich in die Materie mit den Arrays sehr gut einlesen und auch verstehen, wie es mit den Dimensionen funktioniert.

Ich bin mit meinem Projekt schon fast fertig geworden (und ja ich versuche jeden Fehler erst selbst zu lösen). Bei dem folgen Fall komme ich einfach nicht weiter:

Function swisho(x As Double) As Double
    Dim sigo As Double
    sigo = x / (1 + Math.Exp(-x * 1.25))
    swisho = sigo
End Function

Sub test()
Dim arr1 As Variant
ReDim arr1(1 To 2, 1 To 3)
For I = 1 To 2
    For J = 1 To 3
        arr1(I, J) = swisho(Rnd)
    Next J
Next I
    arr1(2, 2) = swisho(CDbl(arr1(1, 2)))
    arr1(2, 1) = swisho(-591.105234590911)
End Sub
Hinweise
Das CDbl beim Code
arr1(2, 2) = swisho(CDbl(arr1(1, 2)))
musste sein, da sonst Typenunverträglichkeit als Fehler kommt.

Der obige Code ist nur ein Teilauszug, um das Problem zu verdeutlichen. Der errechnete Wert von -591.105234590911 habe ich aus dem Lokalfenster abgelesen.

Der Fehler "Überlauf" mit dem Laufzeitfehler 6 kommt in der folgenden Zeile:
sigo = x / (1 + Math.Exp(-x * 1.25))
Hat jemand eine Idee? Vielen Dank!

Betrifft: AW: VBA Fehler Überlauf bei Array Berechnung
von: Daniel
Geschrieben am: 04.09.2020 10:47:22

Hi
du erreichst mit Math.Exp die Grenzen von Double (1,79 * 10^308)
der Wert ist einfach zu groß.

Gruß Daniel

Betrifft: AW: VBA Fehler Überlauf bei Array Berechnung
von: Johann
Geschrieben am: 04.09.2020 11:26:16

Danke für die schnellen Antworten.

Mein erster Gedanke wäre dann,
entweder A: eine Alternative (aber ich glaube Double ist bereits der größte Speicher)
oder B: eine Begrenzung setzen mit
IF x >= 706 THEN x = 706 ELSE x
Müsste ich gleich mal testen.

Betrifft: AW: VBA Fehler Überlauf bei Array Berechnung
von: Daniel
Geschrieben am: 04.09.2020 11:55:14

Hi

kannst du einfacher machen mit MIN(x, 706)
allerdings gilt die Grenze 706 nicht für x, sondern für x * 1,25.

ob es jetzt sinnvoller ist, hier einfach den Wert zu limitieren oder dein Projekt so zu wereitern, dass solle Fälle dem Anwender auch anzuzeigen ohne einen Fehlerabbruch im Code zu erzeugen, musst du entscheiden.

Gruß Daniel

Betrifft: AW: VBA Fehler Überlauf bei Array Berechnung
von: Johann
Geschrieben am: 04.09.2020 13:38:52

Ah, richtig...

Noch was, in der Formel Math.Exp(-x * 1.25)) sorgen die Negativzahlen für die Ausreißer.

Mit -706 bekomme ich aber dennoch eine Fehlermeldung mit dem Überlauf. Hab mich nun daran getastet bis ich auf -567 kam. Da geht er sauber durch.

also so in der vollständiger Form (für die Nachwelt einmal komplett):
Function swisho(y As Double) As Double
    Dim sigo As Double
    x = WorksheetFunction.Max(y * 1.25, -567#) 'höchster Wert, aber minimum -567.00
    sigo = x / (1 + Math.Exp(-x * 1.25))
    swisho = sigo
End Function

Sub test()
Dim arr1 As Variant
ReDim arr1(1 To 2, 1 To 3)
For I = 1 To 2
    For J = 1 To 3
        arr1(I, J) = swisho(Rnd)
    Next J
Next I
    arr1(2, 2) = swisho(CDbl(arr1(1, 2)))
    arr1(2, 1) = swisho(-591.105234590911)
End Sub
INFOS ZU MEINEM PROJEKT
Für alle, die es nachvollziehen wollen: Ich versuche die Künstliche Intelligenz nachzuberechnen. Diese wird überwiegend (hauptsächlich) mit Python bewerkstelligt. Da mir VBA zurzeit wesentlich mehr liegt, will ich das mit Python realsieren.

Der oben genannte Code ist die Aktivierungs Funktion für einen Neuron namens Swish, die angeblich das Google Brain Team entwickelt hat.

Das Problem mit Überlauf konnte ich auch bei den Python Programmiern gerade herausfinden. Hier der Beitrag (mit Google Translator übersetztz):
https://translate.googleusercontent.com/translate_c?depth=1&pto=aue&rurl=translate.google.com&sl=en&sp=nmt4&tl=de&u=https://stackoverflow.com/questions/23128401/overflow-error-in-neural-networks-implementation&usg=ALkJrhjKTZom_4LrntXS6U-tjCVJ0KzCaQ

Betrifft: AW: VBA Fehler Überlauf bei Array Berechnung
von: Johann
Geschrieben am: 04.09.2020 13:40:52

Meine natürlich:
"Da mir VBA zurzeit wesentlich mehr liegt, will ich das mit VBA realsieren."

Betrifft: AW: VBA Fehler Überlauf bei Array Berechnung
von: Nepumuk
Geschrieben am: 04.09.2020 11:13:37

Hallo Johann,

die Exp-Funktion kann maximal Werte bis ±709,782712893 berechnen. Danach kommt der Überlauf.

Gruß
Nepumuk

Betrifft: AW: VBA Fehler Überlauf bei Array Berechnung
von: Johann
Geschrieben am: 04.09.2020 11:30:31

Hallo Nepumuk,

weißt du zufällig, ob dieses Problem generell auch bei anderen Programiersprachen gilt?

Weil das Projekt, dass ich zurzeit mit VBA realisieren möchte, beruht auf Python Code. Dort wird dieses Problem nicht erwähnt.

Betrifft: AW: VBA Fehler Überlauf bei Array Berechnung
von: Nepumuk
Geschrieben am: 04.09.2020 11:36:53

Hallo Johann,

keine Ahnung, ich kenne Python nicht und andere Programmiersprachen sind zu lange her.

Gruß
Nepumuk

Beiträge aus dem Excel-Forum zum Thema "VBA Fehler Überlauf bei Array Berechnung"