comp.lang.ada
 help / color / mirror / Atom feed
From: Per Sandberg <per.sandberg@sandat.dyndns.org>
Subject: Re: can Ada give run-time error or warning for integer division with non-zero remainder?
Date: Sun, 12 Aug 2012 09:16:58 +0200
Date: 2012-08-12T09:16:58+02:00	[thread overview]
Message-ID: <20120812091658.0ad5d91d@lufsen.sandat.dyndns.org> (raw)
In-Reply-To: k07028$eok$1@speranza.aioe.org

If you want an new behaviour for "/" on an integer type you could always
make a new integer type with the required properties:
-------------------------------------------------------------------------
package Integers is
   type Integer is new Standard.Integer;
   overriding function "/" (L : Integer; R  : Integer) return Integer;
   function "/" (L : Standard.Integer; R  : Integer) return Integer;
   function "/" (L : Integer; R  : Standard.Integer) return Integer;
end Integers
-------------------------------------------------------------------------
package body Integers is

   overriding function "/" (L : Integer; R  : Integer) return Integer is
   begin
      return Ret : Integer do
         Ret := Integer (Standard.Integer (Standard.Integer (L) /
   Standard.Integer (R))); if Ret * R /= L then
            raise Constraint_Error with L'Img & "/" & R'Img & " gives
   reminder."; end if;
      end return;
   end "/";

   function "/" (L : Standard.Integer; R  : Integer) return Integer is
   begin
      return Ret : Integer do
         Ret := Integer (L) / R;
      end return;
   end "/";

   function "/" (L : Integer; R  : Standard.Integer) return Integer is
   begin
      return Ret : Integer do
         Ret := L / Integer (R);
      end return;
   end "/";

end Integers;
-------------------------------------------------------------------------
/P


On Sat, 11 Aug 2012 20:14:42 -0500 "Nasser M. Abbasi" <nma@12000.org>
wrote:

> 
> In Ada when dividing 2 integers, the result is an integer
> with the remainder ignored.  Hence 3/2 gives 1
> 
> ----------------------------------
> with Ada.Integer_Text_IO ; use Ada.Integer_Text_IO ;
> 
> procedure foo4 is
>    N : constant integer := 3;
>    M : integer;
>    
>    begin
>      M := N/2;
>      put(M);
>         
> end foo4;
> --------------------------
> 
> >gnatmake foo4.adb
> >./foo4
>            1
> 
> Now, suppose I want to know that a division between 2 integers
> has resulted in nonzero remainder that was thrown away. May be
> because my algorithm is meant to work only for even values and
> an odd value means there was a bug somewhere and I want to
> know about it.
> 
> Is there any kind of run-time switch to tell it to
> check for this? I know I can always add logic myself to
> check for this in the code, using rem() for example (which
> might be the better solution actually) but I was just
> wondering if there is a run-time switch for this.
> 
> thanks,
> -Nasser





  parent reply	other threads:[~2012-08-12  7:16 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-12  1:14 can Ada give run-time error or warning for integer division with non-zero remainder? Nasser M. Abbasi
2012-08-12  5:45 ` J-P. Rosen
2012-08-12  6:45 ` Dmitry A. Kazakov
2012-08-12  7:16 ` Per Sandberg [this message]
2012-08-12 14:03   ` Brad Moore
2012-08-12 14:19 ` Robin Vowels
replies disabled

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