tb0185.pp 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. { Old file: tbs0218.pp }
  2. { rounding errors with write/str (the bugs is fixed, OK 0.99.11 (FK) }
  3. Program Wrong_Output;
  4. {}
  5. Var r,rr,error:Extended;
  6. s:String;
  7. code : word;
  8. {}
  9. Begin
  10. Writeln('Size of Extended type (r)=',SizeOf(r),' bytes');
  11. r:=0.000058184639;
  12. Writeln('r=',r);
  13. Writeln('r=',r:16:13);
  14. Writeln('r=',r:15:12);
  15. Writeln('r=',r:14:11);
  16. Writeln('r=',r:13:10);
  17. Writeln('r=',r:12:9);
  18. Writeln('r=',r:11:8);
  19. Writeln('r=',r:10:7);
  20. Writeln('r=',r:9:6);
  21. Writeln('r=',r:8:5);
  22. Writeln('r=',r:7:4);
  23. Str(r,s);
  24. Writeln('r=',s,' (as string)');
  25. str(r,s);
  26. val(s,rr,code);
  27. { calculate maximum possible precision }
  28. if sizeof(extended) = 10 then
  29. error := exp(17*ln(10))
  30. else if sizeof(extended) = 8 then
  31. error := exp(14*ln(10))
  32. else if sizeof(extended) = 4 then
  33. { the net may have to be 9 instead of 8, not sure }
  34. error := exp(8*ln(10))
  35. else
  36. begin
  37. Writeln('unknown extended type size!');
  38. halt(1)
  39. end;
  40. if abs(r-rr) > error then
  41. begin
  42. Writeln('r=',r);
  43. Writeln('is different from rr=',rr);
  44. halt(1);
  45. end;
  46. End.