{$N+$E+} Program MaxReal; {Hleda nasobenim 2 maximalni cislo v pohyblive desetinne tecce Uzivatelska EXIT procedura pouzita, aby se jeste neco vypsalo po Error Floating Point Overflow} {Type {Real=Double;} {Real=Single;} VAR savedExitProc:Pointer; rmax0:Real; n:Integer; PROCEDURE ChybVyst; BEGIN writeln(' Cislo, ktere uz nelze vynasobit 2 je 2^',n:0,' = ',rmax0); writeln(' Existuje ovsem jeste cislo 1.9999*2^',n:0,' = ',1.9999*rmax0); readln END; {$F+}PROCEDURE CustomExit; {$F-} BEGIN IF ( errorAddr <> NIL ) THEN BEGIN Writeln(' Doslo k run-time chybe - preteceni v pohyblive tecce', ' - Floating Point Overflow'); Write('exitcode=',exitCode,' erroraddr=',seg(errorAddr^), ':',ofs(errorAddr^) ); Readln; { errorAddr:=Nil; exitCode:= 0;} Chybvyst; END; ExitProc := savedExitProc; END; VAR i:integer; rmax,r1:real; BEGIN savedExitProc:=exitProc; exitProc:=@CustomExit; n:=1; rmax0:=1; rmax:=2; WHILE true DO BEGIN rmax0:=rmax; rmax:=rmax0*2; n:=n+1; { WriteLN('n=',n,' rmax0=',rmax0); } END; END.