[Back to NUMBERS SWAG index] [Back to Main SWAG index] [Original]
{ The below is a function to convert BCD real numbers into "normal"
Turbo Reals. It runs under "normal" Turbo or Turbo-87. Very likely
the only use for it is to read BCD reals from a FILE and convert them.
-- Neil J. Rubenking}
TYPE
RealBCD = array[0..9] of byte;
FUNCTION BCDtoNorm(R : realBCD) : real;
Var
I, IntExponent : Integer;
N, Tens, Exponent : Real;
sign : integer;
BEGIN
IF R[0] = 0 THEN BCDtoNORM := 0
ELSE
BEGIN
IntExponent := (R[0] AND $7F) - $3F;
IF R[0] AND $80 = $80 THEN Sign := -1 ELSE Sign := 1;
N := 0; Tens := 0.1;
FOR I := 9 downto 1 DO
BEGIN
N := N + Tens*(R[I] SHR 4);
Tens := Tens * 0.1;
N := N + Tens*(R[I] AND $F);
Tens := Tens * 0.1;
END;
Exponent := 1.0;
FOR I := 1 to IntExponent DO Exponent := Exponent * 10.0;
BCDtoNORM := Exponent * N * Sign;
END;
END;
[Back to NUMBERS SWAG index] [Back to Main SWAG index] [Original]