comp.lang.ada
 help / color / mirror / Atom feed
From: gautier_niouzes@hotmail.com
Subject: Re: Integers and Mathematical Correctness
Date: Sat, 27 Sep 2014 04:44:40 -0700 (PDT)
Date: 2014-09-27T04:44:40-07:00	[thread overview]
Message-ID: <829fff52-ee63-4053-b962-0d8262ec4ade@googlegroups.com> (raw)
In-Reply-To: <c8lj3gFaqrfU1@mid.individual.net>

Le vendredi 26 septembre 2014 18:38:10 UTC+2, Niklas Holsti a écrit :

> I beg to disagree. Rational numbers with Integer numerator and
> denominator are not very useful, because after a relatively small number
> of arithmetic operations, the numerator and denominator often become
> very large and overflow the Integer range.

There is always the possibility of reducing the fraction - see below.

> IMO rational numbers are useful only when the numerator and denominator
> are "bignums", effectively unbounded integer types.

Bignums are probably more useful but prehaps slower. Anyway there is an universal solution with generics, where you can choose what you want.
For instance if you really want to use the type Integer, that's easy:

package Rationals is new Frac_Euclid(Integer, 0,1, "-","+","-","*","/");

The package Frac_Euclid is defned below (works also with non-numerci types!):

generic                              -- to provide:
          type ring_elt is private;                  -- ring element type
          zero, one: ring_elt;                       -- 0 and 1 elements

          with function "-" (a:ring_elt) return ring_elt;    -- unary oper.
          with function "+" (a,b:ring_elt) return ring_elt;  -- binary oper.
          with function "-" (a,b:ring_elt) return ring_elt;
          with function "*" (a,b:ring_elt) return ring_elt;
          with function "/" (a,b:ring_elt) return ring_elt;
                        -- returns the quotient:  a= b*q + r
                        -- q:quotient, r:rest

package Frac_euclid is
  type frac_elt is record a,b:ring_elt; end record;     -- define fraction

  frac_0: constant frac_elt:= (zero,one);
  frac_1: constant frac_elt:= (one,one);

  function Reduction(f: frac_elt) return frac_elt;
  pragma Inline(Reduction);

  function "+" (f: frac_elt) return frac_elt;                 -- unary oper.
  function "-" (f: frac_elt) return frac_elt;

  function "+" (f1,f2: frac_elt) return frac_elt;             -- binary oper.
  function "+" (a: ring_elt; f: frac_elt) return frac_elt;
  function "+" (f: frac_elt; a: ring_elt) return frac_elt;
  function "-" (f1,f2: frac_elt) return frac_elt;
  function "-" (a: ring_elt; f: frac_elt) return frac_elt;
  function "-" (f: frac_elt; a: ring_elt) return frac_elt;
  function "*" (f1,f2: frac_elt) return frac_elt;
  function "*" (a: ring_elt; f: frac_elt) return frac_elt;
  function "*" (f: frac_elt; a: ring_elt) return frac_elt;
  function "/" (f1,f2: frac_elt) return frac_elt;
  function "/" (a: ring_elt; f: frac_elt) return frac_elt;
  function "/" (f: frac_elt; a: ring_elt) return frac_elt;
  function "/" (a,b: ring_elt) return frac_elt;

  function Eq(f1,f2: frac_elt) return Boolean;               -- returns f1=f2

  auto_reduce: Boolean:= True;
  reduce_in_add: Boolean:= True;

  Zero_denominator:          exception;
  Division_by_null_fraction: exception;

end Frac_Euclid;

The implementation (as well as a bigint implementation) is in MathPaqs:
http://sf.net/projects/mathpaqs/

Subdirectory : algebra and multi.

Enjoy
_________________________ 
Gautier's Ada programming 
http://www.openhub.net/accounts/gautier_bd


  parent reply	other threads:[~2014-09-27 11:44 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-10-31 20:27 Integers and Mathematical Correctness chris.danx
2001-10-31 21:21 ` David C. Hoos
2001-10-31 22:16   ` chris.danx
2001-10-31 22:47     ` David C. Hoos
2001-10-31 22:55       ` chris.danx
2001-10-31 23:16         ` Matthew Heaney
2001-10-31 21:42 ` Mark Johnson
2001-11-01 18:57   ` Mark Johnson
2001-11-01 14:32 ` Wes Groleau
2001-11-01 16:18   ` wilhelm.spickermann
2001-11-01 16:48   ` chris.danx
2001-11-01 15:45 ` Charles Sampson
2001-11-01 16:20   ` Marin David Condic
2001-11-03 17:02     ` Richard Riehle
2001-11-05 14:47       ` Marin David Condic
2001-11-06  3:53         ` Eric G. Miller
2001-11-06  4:28           ` James Rogers
2001-11-06  6:06             ` peter
2001-11-06 14:48               ` James Rogers
2001-11-06 15:54                 ` Marin David Condic
2001-11-07  3:44             ` Eric G. Miller
2001-11-01 17:10   ` chris.danx
2001-11-01 17:52     ` Chad Robert Meiners
2001-11-01 19:02       ` chris.danx
2001-11-01 17:57     ` Wes Groleau
2001-11-03 14:57     ` Charles Sampson
2001-11-01 16:11 ` Charles Lindsey
2001-11-01 18:40   ` Wilhelm Spickermann
2001-11-01 19:18   ` chris.danx
2001-11-02  1:37     ` Steven Deller
2014-09-26  9:07       ` vincent.diemunsch
2014-09-26 16:38         ` Niklas Holsti
2014-09-26 16:58           ` AdaMagica
2014-09-26 17:51             ` Adam Beneschan
2014-09-27  9:01               ` AdaMagica
2014-09-27 10:15                 ` AdaMagica
2014-09-27 16:32                 ` Niklas Holsti
2014-09-27 16:49                   ` Jeffrey Carter
2014-09-27 18:52                     ` Niklas Holsti
2014-09-27 18:54                   ` Adam Beneschan
2014-09-27 19:07                     ` Adam Beneschan
     [not found]                 ` <3489504a-f82b-4fec-8a6c-7cb91854dd1e@googlegroups.com>
2014-09-27 19:21                   ` AdaMagica
2014-09-27 11:44           ` gautier_niouzes [this message]
2014-09-26 16:41         ` Adam Beneschan
2014-09-26 16:46         ` Adam Beneschan
2014-09-27 15:21           ` vincent.diemunsch
     [not found]             ` <34da5a39-9fa3-4e8e-a3f9-98f61a4ebcc7@googlegroups.com>
2014-09-28  7:47               ` Dmitry A. Kazakov
2014-09-29 14:58                 ` Adam Beneschan
2014-09-29 16:25                   ` Dmitry A. Kazakov
2014-10-01 19:48                   ` vincent.diemunsch
2014-10-02 11:10                     ` G.B.
2001-11-01 18:08 ` Tucker Taft
2001-11-01 18:54 ` David Starner
2001-11-01 21:44   ` Wilhelm Spickermann
2001-11-02 12:52 ` chris.danx
  -- strict thread matches above, loose matches on Subject: below --
2001-10-31 22:42 Beard, Frank
replies disabled

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