comp.lang.ada
 help / color / mirror / Atom feed
From: Simon Wright <simon@pushface.org>
Subject: Re: Simulation of fixed point in c WITH DIFFERENT BIT-WIDTH
Date: Thu, 03 Nov 2005 06:13:19 +0000
Date: 2005-11-03T06:13:19+00:00	[thread overview]
Message-ID: <m2veza9s3k.fsf@grendel.local> (raw)
In-Reply-To: dka579$8fc$1@hudsucker.umdac.umu.se

Colin Paul Gloster <Colin_Paul_Gloster@ACM.org> writes:

> Mnamky did not say in 
> news:1130690498.388857.225170@g49g2000cwa.googlegroups.com that the 
> datatypes could take negative values, but anyway Gautier's
> type F1 is delta 2.0**(-11) range -1.0 .. 1.0;
> is a wasteful declaration which is bigger than Mnamky's "12-bit 
> wordlength and 11-bit fraction".
> A two's complement signed 1 bit integer can have as its lowest value -1 
> and as its greatest value 0.
> So
> type F3 is delta 2.0**(-11) range -1.0 .. 1.0 - 2.0**(-11);
> type F4 is delta 2.0**(-14) range -2.0 .. 2.0 - 2.0**(-14);
> are more appropiate datatypes.

I'm not sure what is actually required for portability here. AARM95
3.5.9(22-24) says

   The base range of an ordinary fixed point type need not include the
   specified bounds themselves so that the range specification can be
   given in a natural way, such as:

   type Fraction is delta 2.0**(-15) range -1.0 .. 1.0;

   With 2's complement hardware, such a type could have a signed
   16-bit representation, using 1 bit for the sign and 15 bits for
   fraction, resulting in a base range of -1.0 .. 1.0-2.0**(-15).

With GCC 4.0.0 on Darwin, this program

   with Ada.Text_IO; use Ada.Text_IO;

   procedure Gloster is

      type F1 is delta 2.0**(-11) range -1.0 .. 1.0;
      for F1'Size use 12;
      type F2 is delta 2.0**(-14) range -1.0 .. 1.0;
      for F2'Size use 15;
      type F3 is delta 2.0**(-11) range -1.0 .. 1.0 - 2.0**(-11);
      type F4 is delta 2.0**(-14) range -2.0 .. 2.0 - 2.0**(-14);

   begin
      Put_Line ("F1's size is" & Natural'Image (F1'Size));
      Put_Line ("F2's size is" & Natural'Image (F2'Size));
      Put_Line ("F3's size is" & Natural'Image (F3'Size));
      Put_Line ("F4's size is" & Natural'Image (F4'Size));
   end Gloster;

outputs

   $ ./gloster
   F1's size is 12
   F2's size is 15
   F3's size is 12
   F4's size is 16

Commenting out the representation clauses, the output is

   $ ./gloster
   F1's size is 13
   F2's size is 16
   F3's size is 12
   F4's size is 16

I'm not sure why F4's size is 16, though; is this a bug?



  parent reply	other threads:[~2005-11-03  6:13 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-10-30 16:41 Simulation of fixed point in c WITH DIFFERENT BIT-WIDTH mnamky
2005-10-30 17:00 ` Dmitry A. Kazakov
2005-10-30 21:46 ` Gautier Write-only
2005-11-01  2:50 ` Steve
2005-11-02 10:42 ` Colin Paul Gloster
2005-11-02 20:43   ` Gautier Write-only
2005-11-03  6:13   ` Simon Wright [this message]
2005-11-03 10:46     ` Colin Paul Gloster
2005-11-03 13:47     ` Robert A Duff
2005-11-03 14:33       ` Dmitry A. Kazakov
2005-11-03 18:19         ` Jeffrey R. Carter
2005-11-03 20:55         ` Simon Wright
2005-11-02 10:57 ` Colin Paul Gloster
2005-11-02 14:49   ` Martin Krischik
2005-11-02 20:40   ` Gautier Write-only
replies disabled

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