Ausdruck ist zu komplex (CPU-Register reichen nicht)

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Ausdruck ist zu komplex (CPU-Register reichen nicht)

Beitrag von cxAlex »

Durch ein Makro ist mir folgender Code entstanden und hat eben diese Fehlermeldung gebracht:
Ausdruck ist zu komplex (CPU-Register reichen nicht). Bitte splitten Sie ihn.

Code: Alles auswählen

R(i,j) = ((*Entry\Value + R(i+1, j-*Entry\Weight))*(((*Entry\Value + R(i+1, j-*Entry\Weight))>=(R(i+1,j))) Or #Null))+((R(i+1,j))*(((R(i+1,j))>(*Entry\Value + R(i+1, j-*Entry\Weight))) Or #Null))
Das ist doch ein Bug, der Compiler sollte den Code doch auch von selbst zerlegen können.

Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Das ist kein Bug, sonden einfach nur eine Überschreitung der Rekursivitätstiefe:

Code: Alles auswählen

Debug a+(b+(c+(d+e))) ; geht
Debug (b+(c+(d+(e+f))))+a ; geht
Debug a+(b+(c+(d+(e+f)))) ; geht nicht
Es sind scheinbar nur 3 unterklammern möglich, im 3. beispiel sind es 4
im zweiten sind es 4 aber die können schon berechnet werden und danach erst addiert werden und damit geht das auch.

Du kannst den Code bei dir also zum Laufen bringen, wenn du Klammern nach vorne holst und nicht hinten lässt nach eine Addition zB.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

mach doch lieber ne Proc draus mit Ifs.
wird nur minimal langsamer, weil so fette komplexe Ausdrücke auch nicht grad die Booster sind...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Schon klar. War nur mal wieder ne kleine Makrospielerei und es geht mir ja auch nur darum das der Compiler denn Code ja von sich aus zerlegen könnte, also Speicher nutzen wenn die Register ausgehen.

Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ich find das eher gut, dass der compiler das nicht von sich aus macht,
dann kann ich nämlich bestimmen wie was zerlegt werden soll.

wenn er ohne Warnung einfach speicher benutzen würde, würdest du dich wundern,
warum bei einer Klammer mehr auf einmal die Performance einbricht.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Kaeru Gaman hat geschrieben:wenn er ohne Warnung einfach speicher benutzen würde, würdest du dich wundern,
warum bei einer Klammer mehr auf einmal die Performance einbricht.
Mhm, auch wieder war. Egal, habs jetzt mit einer Procedure gemacht, war sowieso nur ein kleiner Testcode.

Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Antworten