{$N+$E+} Program Pres; {Ukazuje jake nejmensi cislo lze pricist k 1, ukazuje, ze prirustek mezi nejblizsimi cisly mezi 1 a 2 je konstantni u standardnich typu single a double, s kazdym exponentem 2 roste ci klesa danou mocninou 2} {Zkusit priklad 1+delt <> 1, abychom ukazali, ze uvnitr operace je presnost vetsi, pri zapnutem koprocesoru je dokonce vetsi nez u DOUBLE} Type Real=Single; {Real=Double;} VAR n,i:integer; u,delt,delt0,r1,r2,rd1,rd2:real; BEGIN n:=1; delt:=0.5; u:=1.0+delt; WHILE(u<>1.0) do BEGIN {WHILE(1+delt<>1.0) do begin} delt0:=delt; delt:=delt/2.0; n:=n+1; u:=1.0+delt; END; Writeln('PRESNOST PREKROCENA U n=',n,' DELT=',delt); Writeln('Nejblizsi cislo k 1 (> 1) je 1 + delt0 = 1 + 2^-',n-1:0); Writeln; writeln('delt0 ',delt0); r1:=1.0+1.0*delt0; r2 := 1.0 + 1.8*delt0; Writeln('1+delt0=',r1,' 1+1.8*delt0=',r2); Writeln(' Pri psani bez formatu TP u Double nezobrazi vsechna mista !!!'); Writeln('1+delt0=',r1:25:19,' 1+1.8*delt0=',r2:25:19); Writeln(' S dost dlouhym formatem je vidime cele'); Writeln; rd1:=r1-1.0; rd2:=r2-1.0; Writeln('Rozdil je zachovan ',rd1,rd2); Writeln; r1:=1.0+0.5*delt0;rd1:=r1-1.0; Writeln('Pri pricteni k 1 mensiho cisla nez 0.5*delt0 zaokrouhli na 1'); Writeln('(1+0.5*delt0) - 1.0 =',rd1); Writeln('Je rozdil mezi postupnym vypoctem a vypoctem najednou'); r1:=1.0+50.8*delt0;r2:=1.0+50.4*delt0;rd1:=r1-r2; rd2:=(1.0+50.8*delt0)-(1.0+50.4*delt0); Writeln('(1.0+50.8*delt0)-(1.0+50.4*delt0)=',rd1,' postupny', ' ',rd2, ' najednou'); Writeln('V okoli 1.3 je krok mezi cisly stejny jako u 1.0!!'); r1:=1.3;r2:=1.3+delt0; Writeln('1.3 = ',r1,' 1.3+delt0',r2); r1:=r2-r1; r2:=r1/delt0; Writeln('(1.3+delt0)-1.3=',r1,' [(1.3+delt0)-1.3]/delt0=',r2); r1:=2.0-delt0; r2:=2.0-r1; Writeln('2-delt0=',r1,' 2-(2-delt0)=',r2); Writeln('Od 2 je krok mezi cisly dvojnasobny !!'); r2:=2.0+1.1*delt0; r1:=r2-2.0; r2:=r1/delt0; Writeln('(2+1.1*delt0)-2=',r1,' [(2+1.1*delt0)-2]/delt0=',r2); Readln; END.