[Back to MATH SWAG index] [Back to Main SWAG index] [Original]
Program RealConv;
{ This program demonstrates the conversion of a 6 byte Turbo Pascal }
{ real variable type by re-creating the exponent and Mantissa. }
{ The temporary variable Mantissa accumulates the value stored in }
{ bytes 2 through 6. }
type
SixByteArray = array[1..6] of byte;
var
r : real;
s : SixByteArray absolute r;
{ Allows access to individual real type bytes }
i,j : byte;
PosFlag : boolean;
Mantissa : real;
Number : real;
function power (x,y : integer) : real;
begin
power := exp(y * ln(x));
end;
begin
write('Enter floating point Number ');
readln(r);
{ Check if entry is positive from bit 7 of byte 6 }
PosFlag := ($80 and s[6]) = 0;
{ Force bit 7 of byte 6 on }
s[6] := s[6] or $80;
{ Initialize the Mantissa }
Mantissa := 1.0;
{ Check each byte of mantissa }
for i := 2 to 6 do
{ Check each bit }
for j := 0 to 7 do
if ((s[i] shr j) and 1 ) = 1 then
{ Increment mantissa appropriately }
Mantissa := Mantissa + power(2, (j + (i-2)*8));
{ Normalize the number by dividing by 2^40 }
Number := Mantissa / power(2,40);
{ Get number by multiply Mantissa by the exponent }
Number := Number * power(2, s[1] - $80);
if not PosFlag then Number := Number * -1;
writeln(Number);
readln;
end.
[Back to MATH SWAG index] [Back to Main SWAG index] [Original]