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
prev parent 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