Aufgabe 2.2 Korrektheit der Optimierung

AlexanderF
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 140
Registriert: 2. Mai 2010 17:55

Aufgabe 2.2 Korrektheit der Optimierung

Beitrag von AlexanderF »

hallo

ich habe eine Frage zu Aufgabe 2.2

Wie in der Vorlesung schon gesagt, haben die TAM Datenworte 16 Bit.
und somit ergibt sich der maximal repräsentierbare Integer maxintRep = 32767

Allerdings scheinen sich Compiler und der TAM Interpreter nicht immer wirklich darum zu kümmern.

So übersetzt der Compiler anstandslos folgendes Programm:

let
var i : Integer
in
begin
i := 32768;
putint(i)
end

und auch der Interpreter liefert:

********** TAM Interpreter (Java Version 2.1) **********
32768
Program has halted normally.


obwohl 32768 offensichtlich größer als maxintRep ist.

man kann anscheinend jeden beliebigen (32 Bit) Integer benutzen,
ohne dass Compiler oder Interpreter davon Notiz nehmen,

erst bei 2147483648 (= 2 ^ 31) (also die erste Zahl die nicht als 32 Bit Integer darstellbar ist)
wird während der Code Generierung eine

java.lang.NumberFormatException

geworfen.


Jedoch beim Ersetzen der Zeile

i := 32768;

durch

i := 32767 + 1;


liefert der TAM Interpreter:

********** TAM Interpreter (Java Version 2.1) **********

Program has failed due to overflow.
[...]

Anscheinend prüft der TAM Interpreter nur ob bei Integer Operationen ein overflow aufgetreten ist,
nicht aber ob die Werte an sich überhaupt innerhalb des 16 Bit Integer Bereiches liegen.

Wenn wir also sichergehen wollen, dass sich das Programm nach der Compilierung mit Optimierung genauso verhält wie ohne Optimierung,
dürfte man z.B. die Additionen von zwei konstanten Integer Expressions (wie z.B. 32767 + 1) nicht durch 32768 ersetzen, da der Interpreter sonst ohne Optimierung einen Laufzeitfehler melden würde, mit Optimierung aber nicht.

Außerdem ist der minimale repräsentierbare Integer der TAM laut Buch und Quellcode auch nicht wie in der Vorlesung gesagt -32768 (was man bei Zweierkomlementdarstellung mit 16 Bit erwarten würde), sondern -maxintRep also -32767


Dürfen wir bei der Bearbeitung der Hausübung derlei Besonderheiten des Compilers und Interpreters ignorieren, in dem wir bei der Optimierung nicht weiter um overflows kümmern, oder wie sollen wir overflows behandeln?

mit freundlichen Grüßen,
Alexander

Jens Huthmann
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 192
Registriert: 10. Nov 2011 19:42

Re: Aufgabe 2.2 Korrektheit der Optimierung

Beitrag von Jens Huthmann »

Die Overflows dürfen Sie ignorieren.

Antworten

Zurück zu „Archiv“