{ prog1a.pas -- Determine Machine Epsilon Modified Sep 2, 2007 by Eric Olson for Mathematics 466 Written Feb 20, 2001 by Eric Olson for Mathematics 483 For more information see Step 3 in First Steps in Numerical Analysis, 2nd Edition, by Hosking, Joe, Joyce and Turner. } program main; function maxdelta(var x:real):real; var a,b,delta,deold,r1:real; begin a:=0; if x>0 then b:=x else b:=-x; deold:=a; delta:=(a+b)/2.0; while deold<>delta do begin r1:=x+delta; if r1=x then a:=delta else b:=delta; deold:=delta; delta:=(a+b)/2.0; end; maxdelta:=delta end; var data : array [1..8] of real = ( 1.0, 2.0, 3.0, 4.0, 5.0, 10.0, 100.0, 1000.0); var i:integer; x,delta:real; begin writeln('prog1a.pas -- Determine Machine Epsilon'); writeln('Using ',sizeof(real),' byte floating point.'); writeln; for i:=1 to sizeof(data) div sizeof(real) do begin x:=data[i]; delta:=maxdelta(x); writeln('x=',x,' delta=',delta) end end.