1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- { Old file: tbs0218.pp }
- { rounding errors with write/str (the bugs is fixed, OK 0.99.11 (FK) }
- Program Wrong_Output;
- {}
- Var r,rr,error:Extended;
- s:String;
- code : word;
- {}
- Begin
- Writeln('Size of Extended type (r)=',SizeOf(r),' bytes');
- r:=0.000058184639;
- Writeln('r=',r);
- Writeln('r=',r:16:13);
- Writeln('r=',r:15:12);
- Writeln('r=',r:14:11);
- Writeln('r=',r:13:10);
- Writeln('r=',r:12:9);
- Writeln('r=',r:11:8);
- Writeln('r=',r:10:7);
- Writeln('r=',r:9:6);
- Writeln('r=',r:8:5);
- Writeln('r=',r:7:4);
- Str(r,s);
- Writeln('r=',s,' (as string)');
- str(r,s);
- val(s,rr,code);
- { calculate maximum possible precision }
- if sizeof(extended) = 10 then
- error := exp(17*ln(10))
- else if sizeof(extended) = 8 then
- error := exp(14*ln(10))
- else if sizeof(extended) = 4 then
- { the net may have to be 9 instead of 8, not sure }
- error := exp(8*ln(10))
- else
- begin
- Writeln('unknown extended type size!');
- halt(1)
- end;
- if abs(r-rr) > error then
- begin
- Writeln('r=',r);
- Writeln('is different from rr=',rr);
- halt(1);
- end;
- End.
|