Seite 1 von 1
Ausdruck ist zu komplex (CPU-Register reichen nicht)
Verfasst: 02.09.2009 12:02
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
Verfasst: 02.09.2009 12:28
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.
Verfasst: 02.09.2009 12:54
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...
Verfasst: 02.09.2009 12:58
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
Verfasst: 02.09.2009 13:01
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.
Verfasst: 02.09.2009 13:04
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