generic
    type Number is digits <>;
package Floating_Point_Utilities is

    type Base is range 2 .. 16;

    type Numbers is array (Positive range <>) of Number;

    function Integer_Part (The_Number : in Number) return Integer;
    function Real_Part (The_Number : in Number) return Number;
    function Floor (The_Number : in Number) return Integer;
    function Ceiling (The_Number : in Number) return Integer;
    function Min (Left : in Number; Right : in Number) return Number;
    function Min (The_Numbers : in Numbers) return Number;
    function Max (Left : in Number; Right : in Number) return Number;
    function Max (The_Numbers : in Numbers) return Number;
    function Is_Positive (The_Number : in Number) return Boolean;
    function Is_Natural (The_Number : in Number) return Boolean;
    function Is_Negative (The_Number : in Number) return Boolean;
    function Is_Zero (The_Number : in Number) return Boolean;
    function Image_Of (The_Number : in Number; With_The_Base : in Base := 10)
                      return String;
    function Value_Of (The_Image : in String; With_The_Base : in Base := 10)
                      return Number;
    function Is_Equal (Left : in Number; Right : in Number) return Boolean;

    Lexical_Error : exception;

end Floating_Point_Utilities;