dtp hat geschrieben: ↑29.07.2020, 07:30
Mir war zwar bewusst, dass die ReGaHSS von rechts nach links rechnet, aber ich war bisher der irrigen Annahme, dass auch die Variable bzw. Konstante, die ganz rechts steht, die also zuerst kommt, den Typ des Ergebnisses definiert. Aber es ist im Gegenteil die Variable bzw. Konstante, die zuletzt herangezogen wird, die also ganz links steht.
das ist fieserweise nicht so ganz richtig....
Der Ergebnis (oder besser zwischenergebnistyp) ist immer der Linksstehende der Operation, so wird ein schuh draus.
Beispiel:
Nach deiner Theorie kommt eine Gleitpunktzahl raus, und das musste 34.00 sein... isses aber nicht, das ergebnis ist nachher 32.00
Die rega arbeitet nach dem Stackpointer Verfahren, LIFO, last IN, First out.
die aufgabe landet durch den Parser auf dem Stackpoiunter
Code: Alles auswählen
2.0 --> 2.0 --> 2.0 --> 2.0 -- > 2.0
+ + + +
5 5 5
* *
6.5
Nun kommt der Interpreter als schleife (Wenn Stack enthält mehr als 1 Wert) und arbeitet das ab
erster Wert 6.5
Operaton *
zweiter Wert 5
Zweiter wert ist Interger, also wird eine Intergermultiplikatoin gemacht 5 * 6.5 = 30, der wert kommt wieder auf den Stack
nach edm ersten Abarbeiten sieht der Stack so aus
Code: Alles auswählen
2.0 --> 2.0 --> 2.0 --> 2.0 -- > 2.0 --> 2.0
+ + + + +
5 5 5 30
* *
6.5
jetzt wirder das ganze
erster Wert 30
Operaton +
zweiter Wert 2.0
Zweiter wert ist float, also wird eine Gleitpunktaddition gemacht 2.0 + 30 = 32.00, der wert kommt wieder auf den Stack
Danach sieht der Stack so aus
Code: Alles auswählen
2.0 --> 2.0 --> 2.0 --> 2.0 -- > 2.0 --> 2.0 --> 32.00
+ + + + +
5 5 5 30
* *
6.5
Es ist nur noch ein Ergebnis auf dem Stack, heisst, abgearbeiet, Ergebnis liegt vor.
So kommen diese im ersten moment merkwürdigen Werte zustande
Black