home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / bix / packreal.pas < prev    next >
Pascal/Delphi Source File  |  1986-08-04  |  932b  |  40 lines

  1. {pack 6-byte REALS into 2-byte integers with greater range than MAXINT}
  2. {TITLE: Data Compression Nifty!}
  3.  
  4. program tr;
  5. type both = record case integer of
  6.             0:(r:real);
  7.             1:(b:array[0..5] of byte)
  8.             end;
  9.      str3=string[3];
  10.  
  11. var r:real;i:integer;
  12.  
  13. function r2i(r:real):integer;
  14. var x:both;
  15.     i:integer;
  16. begin
  17. x.r:=r+2;
  18. i:=(x.b[0] and $1f) shl 11; {5 lsb of exponent}
  19. i:=i or ( (x.b[5] and $7f) shl 4); {hi 7 bits of precision}
  20. i:=i or (x.b[4] shr 4); {lo 4 bits of precision}
  21. r2i:=i
  22. end;
  23.  
  24. function i2r(i:integer):real;
  25. var j:integer;x:both;
  26. begin
  27. x.r:=0;
  28. x.b[0]:=$80 or ((i shr 11) and $1f);
  29. x.b[5] := (i shr 4) and $7f; {hi 7 bits precision}
  30. x.b[4] := (i and $000f) shl 4; {lo 4 bits precision}
  31. i2r:=x.r-2
  32. end;
  33.  
  34. begin
  35. repeat
  36. write('enter real number.....');readln(r);
  37. writeln('orig=',r:12:6,' int=',r2i(r),' packed/unpacked=',i2r(r2i(r)):12:6);
  38. until r=0;
  39. end.
  40.