comp.lang.ada
 help / color / mirror / Atom feed
From: AdaMagica <christ-usch.grein@t-online.de>
Subject: Re: Integers and Mathematical Correctness
Date: Sat, 27 Sep 2014 12:21:31 -0700 (PDT)
Date: 2014-09-27T12:21:31-07:00	[thread overview]
Message-ID: <767f35d1-20ed-4726-8adc-742f5f15671d@googlegroups.com> (raw)
In-Reply-To: <3489504a-f82b-4fec-8a6c-7cb91854dd1e@googlegroups.com>

On Saturday, September 27, 2014 8:20:32 PM UTC+2, Adam Beneschan wrote:
> It may choose it for *one* of the operands, depending on whether these functions are directly visible:
>
>     function "+" (Left : Rational; Right : Integer) return Rational;
>     function "+" (Left : Integer; Right : Rational) return Rational;
>
> Actually, if either of those is visible, then there is more than one way to
> choose the meanings of "+" and "/" to form an acceptable interpretation.
> Because of this, the expression would be treated as ambiguous, and the
> compiler would reject it.

Exactly that's my point, the compiler will reject it. (You're right, the result is not 0, the compiler rejects the code. My error!)

With Integer, there's always visible with preference

function "/" (Left, Right: Integer) return Integer;

which will ruin 1/2 + 2/3, because your two functions above are there. Thus these interpretations are possible, which the compiler cannot resolve:

Rational + Rational = Rational
Integer  + Rational = Rational
Rational + Integer  = Rational

So you have to remove the integer division, which is only possible for a new type Whole:

overriding function "/" (Left, Right: Whole) return Whole is abstract;

Now everything can work. There is of course no

function "+" (Left, Right: Whole) return Rational;

So in short: The crux is not rational numbers combined with themselves, but mixed arithmetics (i.e. rational and whole).

So I still do not believe that you can do mixed arithmetics with rationals constructed from Integer:

  function "+" (Left: Rational; Right: Integer ) return Rational;
  function "+" (Left: Integer ; Right: Rational) return Rational;
  function "+" (Left: Rational; Right: Rational) return Rational;
  "/" (Left, Right: Integer) return Rational;  -- constructor
  "/" (Left, Right: Integer) return Integer;   -- from Standard

You cannot hide the last function!

[OK, you can make 1/2 + 1/3 work by qualifying the functions, but that's not the point (and extremely ugly.]


  parent reply	other threads:[~2014-09-27 19:21 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 [this message]
2014-09-27 11:44           ` gautier_niouzes
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