# Real, LongReal, and Extended

For definitions of the terms used in the floating-point interfaces, see the ANSI/IEEE Standard 754-1985, IEEE Standard for Binary Floating-Point Arithmetic.

The interfaces `Real`, `LongReal`, and `Extended` define constant attributes of the three built-in floating-point types:

    INTERFACE Real; TYPE T = REAL;
    CONST
      Base: INTEGER = ...;
      Precision: INTEGER = ...;
      MaxFinite: T = ...;
      MinPos: T = ...;
      MinPosNormal: T = ...;
      MaxExpDigits: INTEGER = ...;
      MaxSignifDigits: INTEGER = ...;
    END Real.

    INTERFACE LongReal; TYPE T = LONGREAL;
    CONST
      Base: INTEGER = ...;
      Precision: INTEGER = ...;
      MaxFinite: T = ...;
      MinPos: T = ...;
      MinPosNormal: T = ...;
      MaxExpDigits: INTEGER = ...;
      MaxSignifDigits: INTEGER = ...;
    END LongReal.

    INTERFACE Extended; TYPE T = EXTENDED;
    CONST
      Base: INTEGER = ...;
      Precision: INTEGER = ...;
      MaxFinite: T = ...;
      MinPos: T = ...;
      MinPosNormal: T = ...;
      MaxExpDigits: INTEGER = ...;
      MaxSignifDigits: INTEGER = ...;
    END Extended.

The specification is the same for all three interfaces:

> `Base` is the base of the floating-point representation for `T`.

> `Precision` is the number of base-`Base` digits of precision for `T`.

> `MaxFinite` is the maximum finite value in `T`. For non-IEEE implementations, this is the same as `LAST(T)`.

> `MinPos` is the minimum positive value in `T`.

> `MinPosNormal` is the minimum positive normal value in `T`; it differs from `MinPos` only for implementations (like IEEE) with denormalized numbers.

> `MaxExpDigits` is the smallest integer with the property that every finite number of type `T` can be written in base-10 scientific notation using an exponent with at most `MaxExpDigits`.

> `MaxSignifDigits` is the smallest integer with the property that for every point `x` along the number line, the two floating-decimal numbers with `MaxSignifDigits` closest to `x` are closer to each other than are the two closest numbers of type `T`.

Typically,

    MaxExpDigits    = CEILING(LOG_10(LOG_10(MaxFinite)))
    MaxSignifDigits = CEILING(LOG_10(Base EXP Precision)) + 1.