[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]