Ada Programming/Libraries/System.Fat Gen

This generic package provides a target independent implementation of the floating-point attributes that denote functions. The implementations here are portable, but very slow. The runtime contains a set of instantiations of this package for all predefined floating-point types, and these should be replaced by efficient assembly language code where possible.

 subtype UI is Integer;

The runtime representation of universal integer for the purposes of this package is integer. The expander generates conversions for the actual type used. For functions returning universal integer, there is no problem, since the result always is in range of integer. For input arguments, the expander has to do some special casing to deal with the (very annoying!) cases of out of range values. If we used Long_Long_Integer to represent universal, then there would be no problem, but the resulting inefficiency would be annoying.

 function Adjacent          (X, Towards : T)              return T;
 function Ceiling           (X : T)                       return T;
 function Compose           (Fraction : T; Exponent : UI) return T;
 function Copy_Sign         (Value, Sign : T)             return T;
 function Exponent          (X : T)                       return UI;
 function Floor             (X : T)                       return T;
 function Fraction          (X : T)                       return T;
 function Leading_Part      (X : T; Radix_Digits : UI)    return T;
 function Machine           (X : T)                       return T;
 function Model             (X : T)                       return T;
 function Pred              (X : T)                       return T;
 function Remainder         (X, Y : T)                    return T;
 function Rounding          (X : T)                       return T;
 function Scaling           (X : T; Adjustment : UI)      return T;
 function Succ              (X : T)                       return T;
 function Truncation        (X : T)                       return T;
 function Unbiased_Rounding (X : T)                       return T;