Welche Bedeutung hat 100000000 als Überlaufgrenze in Pascal?

Welche Bedeutung hat 100000000 als Überlaufgrenze in Pascal?

Ein kürzlich geführtes Gespräch über fehlerfreie Software am Arbeitsplatz führte zu einer Diskussion über TeX (das als nahezu fehlerfrei gilt, obwohl das technisch gesehen falsch sein könnte). Da der Quellcode von TeX ausführlich dokumentiert ist in„TeX: Das Programm“, wir haben einen Blick hineingeworfen und ein Verfahren ausgewählt, das auf den ersten und zweiten Blick unklar war. Es handelt sich um eine Implementierung von print_int, die in diesem Buch auf Seite 28 in §65 steht. In der Dokumentation heißt es:

@ The following procedure, which prints out the decimal representation of a given integer |n|, has been written carefully so that it works properly if |n=0| or if |(-n)| would cause overflow. It does not apply |mod| or |div| to negative arguments, since such operations are not implemented consistently by all \PASCAL\ compilers.

Das Verfahren selbst sieht folgendermaßen aus (Code aus der WEB-Quelle entnommen):

procedure print_int(@!n:integer); {prints an integer in decimal form}
var k:0..23; {index to current digit; we assume that $|n|<10^{23}$}
@!m:integer; {used to negate |n| in possibly dangerous cases}
begin k:=0;
if n<0 then
  begin print_char("-");
  if n>-100000000 then negate(n)
  else  begin m:=-1-n; n:=m div 10; m:=(m mod 10)+1; k:=1;
    if m<10 then dig[0]:=m
    else  begin dig[0]:=0; incr(n);
      end;
    end;
  end;
repeat dig[k]:=n mod 10; n:=n div 10; incr(k);
until n=0;
print_the_digs(k);
end;

Während der Algorithmus selbst recht verständlich ist (schließlich wird nur eine Zahl ausgegeben), konnten wir nicht verstehen, welche Bedeutung die Zahl 100000000 im Kontext der damaligen Pascal-Compiler hatte. In der Dokumentation wird von Überläufen gesprochen, ich würde jedoch erwarten, dass ein Überlauf an einer Zweierpotenzgrenze und nicht an einer Zehnerpotenzgrenze auftritt.

Was ist die Erklärung oder Bedeutung dieser Zahl? Handelt es sich hier um eine Eigenart des Compilers oder eines Sprachstandards?

verwandte Informationen