comp.lang.ada
 help / color / mirror / Atom feed
From: "Jeffrey R. Carter" <spam.jrcarter.not@spam.not.acm.org>
Subject: Re: Curiosity about different integer types
Date: Sat, 18 Jun 2016 16:05:21 -0700
Date: 2016-06-18T16:05:21-07:00	[thread overview]
Message-ID: <nk4k3n$jlt$1@dont-email.me> (raw)
In-Reply-To: <63c033c6-10b5-44fc-8d93-a786392a6058@googlegroups.com>

On 06/18/2016 02:26 PM, mockturtle wrote:
> 
>   type Foo is new Integer range 0 .. 115;
> 
>   type Bar is new Integer range -1000 .. 1000;
> 
> My gut feeling is that, despite the fact that they are both derived from Integer, there is no guarantee that the "binary type" underneath them is the same.  For example, Foo could be implemented as an 8-bit integer, while Bar could be implemented as a 16-bit integer, or maybe both could be implemented as (say) 32-bit integers.
> 
> Am I right?  I tried to do some experiments with gcc and both types are implemented with the same binary type, but it could be only for efficiency reasons...   

"new T" means that the base type should be the same as T'Base. Note that all
operations are done using a representation with at least the range of the base
type. So Foo'Base will have the same representation as Integer'Base.

Using representation clauses, you can arrange for objects of your types to be
stored in less space than Integer. But any operations on those values will
expand them to the size of Integer (or larger).

"new T" is not something that you should use very often, especially for a T
that's a predefined type like Integer. It's usually better to declare

type Foo is range 0 .. 115;
type Bar is range -1000 .. 1000;

and let the compiler choose the representation of the base type. Even if you
need to guarantee a certain base range for some intermediate values, it's
usually better to declare that range explicitly.

type Foo_Base is range -(2 ** 31 - 1) .. 2 ** 31 - 1;
subtype Foo is Foo_Base range 0 .. 115;

Making Foo "new Integer" to get a similar base range might earn you a nasty
surprise if you port your code to a compiler that has 16-bit Integer.

-- 
Jeff Carter
"My legs are gray, my ears are gnarled, my eyes are old and bent."
Monty Python's Life of Brian
81

  parent reply	other threads:[~2016-06-18 23:05 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-18 21:26 Curiosity about different integer types mockturtle
2016-06-18 21:57 ` Dmitry A. Kazakov
2016-06-18 22:04 ` Björn Lundin
2016-06-18 23:05 ` Jeffrey R. Carter [this message]
2016-06-20 11:39 ` mockturtle
replies disabled

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