From: adambeneschan@gmail.com
Subject: Re: How to round to the nearest fixed-point value?
Date: Wed, 22 Jan 2014 14:45:22 -0800 (PST)
Date: 2014-01-22T14:45:22-08:00 [thread overview]
Message-ID: <f37cea1f-6c68-483b-8097-cca566a5d8a2@googlegroups.com> (raw)
In-Reply-To: <slrnldvtim.1lme.lithiumcat@sigil.instinctive.eu>
On Wednesday, January 22, 2014 8:48:26 AM UTC-8, Natasha Kerensikova wrote:
> package Lib is
> type High is delta 0.001 digits 9;
> type Low is delta 0.01 digits 9;
>
> function Convert (Value : High) return Low;
> end Lib;
>
> package body Lib is
> function Convert (Value : High) return Low is
> begin
> return Low'Round (Value);
> end Convert;
> end Lib;
> with Ada.Text_IO;
> with Lib;
> procedure Testcase is
> Raw_Value : constant Lib.High := 0.999;
> Shown_Value : Lib.Low;
> begin
> Ada.Text_IO.Put_Line (Lib.Low'Image (Lib.Low'Round (Raw_Value)));
> Shown_Value := Lib.Convert (Raw_Value);
> Ada.Text_IO.Put_Line (Lib.Low'Image (Shown_Value));
> end Testcase;
> 1.00
> 0.99
I'm pretty sure this is a compiler bug. Since Low'Small is a multiple of High'Small, you can work around it by changing the definition of Convert to
return Low (Value + Low'Small / 2);
(Low'Small is a universal real and therefore Low'Small/2 will be interpreted as a value of type High. The type conversion to Low will truncate.)
-- Adam
next prev parent reply other threads:[~2014-01-22 22:45 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-22 16:48 How to round to the nearest fixed-point value? Natasha Kerensikova
2014-01-22 17:53 ` G.B.
2014-01-22 22:26 ` adambeneschan
2014-01-23 9:21 ` Georg Bauhaus
2014-01-22 22:45 ` adambeneschan [this message]
2014-01-23 5:29 ` J-P. Rosen
2014-01-23 7:00 ` Natasha Kerensikova
2014-01-23 9:42 ` Georg Bauhaus
2014-01-23 7:02 ` Natasha Kerensikova
2014-01-23 16:41 ` adambeneschan
2014-01-24 9:58 ` Natasha Kerensikova
2014-01-24 22:30 ` Randy Brukardt
2014-01-24 22:47 ` Randy Brukardt
2014-01-26 14:19 ` Natasha Kerensikova
2014-01-28 23:43 ` Randy Brukardt
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox