comp.lang.ada
 help / color / mirror / Atom feed
From: billwolf%hazel.cs.clemson.edu@hubcap.clemson.edu (William Thomas Wolfe, 2847 )
Subject: Re: Truncation of FLOATs
Date: 10 Jan 90 21:35:20 GMT	[thread overview]
Message-ID: <7626@hubcap.clemson.edu> (raw)
In-Reply-To: 1550@castle.ed.ac.uk

From ssj@castle.ed.ac.uk (S Johal):
> [Trying to get the integer part of a floating point number:]
>     if FLOATING_NUMBER - ROUNDED >= 0.0 then
>       TRUNCATED_PART := ROUNDED;
>     else
>       TRUNCATED_PART := ROUNDED - 1;
>     end if;

   First, I currently handle it as follows:

      generic
         type FLOAT_TYPE is digits <>;
         type INTEGER_TYPE is range <>;
      function TRUNCATE (THE_FLOAT : in FLOAT_TYPE) return INTEGER_TYPE;
  
         -- Results may vary for values which are FLOAT_TYPE'EPSILON 
         --   less than a whole number, depending on the compiler.  It 
         --   makes use of the compiler's integer-to-real conversion 
         --   function, the semantics of which, at the point halfway 
         --   between two whole numbers, is defined to be 
         --   compiler-dependent (Ada 83 LRM 4.6 (7)).


      function TRUNCATE (THE_FLOAT : in FLOAT_TYPE) return INTEGER_TYPE is

      begin   -- function TRUNCATE 
         return INTEGER_TYPE (THE_FLOAT - (0.5 - FLOAT_TYPE'EPSILON));
             -- works correctly @ boundary iff rounding is down...
         -- Another option is:
         --    return ( INTEGER_TYPE'(10.0 * THE_FLOAT) / 10 );
         -- which eliminates the rounding error by truncating it away,
         --   but there are numeric overflow problems with this approach.
      end TRUNCATE;

   Fortunately, there is a new secondary standard from NUMWG which will
   provide a better-defined alternative; the proposed standard package
   GENERIC_PRIMITIVE_FUNCTIONS will provide a TRUNCATE function:

      function TRUNCATE (X : FLOAT_TYPE) return FLOAT_TYPE;

         -- may raise PRIMITIVE_FUNCTIONS_EXCEPTIONS.REPRESENTATION_ERROR

   I'm told that there will be an article posted in the near future which
   gives a comprehensive description of ths proposed standard, as well as
   another similar proposed standard package, GENERIC_ELEMENTARY_FUNCTIONS,
   so stay tuned.
  

   Bill Wolfe, wtwolfe@hubcap.clemson.edu

      reply	other threads:[~1990-01-10 21:35 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1990-01-10 18:06 Truncation of FLOATS S Johal
1990-01-10 21:35 ` William Thomas Wolfe, 2847  [this message]
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox