comp.lang.ada
 help / color / mirror / Atom feed
* Another question about fixed point types.
@ 2010-08-28 22:45 Peter C. Chapin
  2010-08-29  6:32 ` Yannick Duchêne (Hibou57)
                   ` (3 more replies)
  0 siblings, 4 replies; 13+ messages in thread
From: Peter C. Chapin @ 2010-08-28 22:45 UTC (permalink / raw)


Hello!

Consider this type definition:

   type Julian_Day is delta 0.001 range 2_415_385.5 .. 2_489_665.0;

Now consider this function that is intended to return the (approximate)
interval between two Julian days in seconds:

   function Interval_Between
      (Left : Julian_Day; Right : Julian_Day) return Duration is
      Result : Duration;
   begin
      if Left > Right then
         Result := 86_400.0 * (Left - Right);
      else
         Result := 86_400.0 * (Right - Left);
      end if;
      return Result;
   end Interval_Between;

The difference 'Left - Right' is definitely not in the range of
Julian_Day. It is likely to be a small value and could even be zero. I
understand that the computation of 'Left - Right' will be done in
Julian_Day's base type but I'm unclear what that means to me.

It is my understanding that the compiler is allowed to choose a base
type that can only deal with the small-ish range of values between the
limits of Julian_Day. That range does not include zero. However, the
code above compiles and runs fine using GNAT GPL 2010. My test program
includes a case where Left and Right are the same so the difference is
zero. Is this code reliable or am I just seeing the effect of GNAT's
particular, implementation-specific choices?

Peter

P.S. The code above is a simplification of the real code, but I believe
it illustrates the question I have.



^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2010-08-30  8:50 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-08-28 22:45 Another question about fixed point types Peter C. Chapin
2010-08-29  6:32 ` Yannick Duchêne (Hibou57)
2010-08-29 11:23   ` Peter C. Chapin
2010-08-29  9:02 ` Phil Thornley
2010-08-29 11:29   ` Peter C. Chapin
2010-08-29 12:31     ` Phil Thornley
2010-08-29 13:49       ` Jeffrey Carter
2010-08-29 14:20       ` Peter C. Chapin
2010-08-29 17:50         ` Phil Thornley
2010-08-29 22:03           ` Peter C. Chapin
2010-08-30  8:50           ` Mark Lorenzen
2010-08-29 10:24 ` Simon Wright
2010-08-29 14:02 ` Stephen Leake

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