gladman added the comment:

On 24/09/2014 08:58, Mark Dickinson wrote:
> 
> Mark Dickinson added the comment:
> 
> The current `gcd` definition is almost accidental, in that it just happens to 
> be what's convenient for use in normalisation in the Fraction type.  If 
> people are using it as a standalone implementation of gcd, independent of the 
> fractions module, then defining the result to be always nonnegative is 
> probably a little less surprising than the current behaviour.
> 
> BTW, I don't think there's a universally agreed definition for the extension 
> of the gcd to negative numbers (and I certainly wouldn't take Rosen's book as 
> authoritative: did you notice the bit where he talks about 35-bit machines 
> being common?), so I don't regard the fraction module definition as wrong, 
> per se.  But I do agree that the behaviour you propose would be less 
> surprising.

I only quoted Rosen because I had it immediately to hand.  I will
willingly supply more references if you need them.  Sadly even some
maths books don't cover this at all but then go on to rely on the
co-prime test gcd(a, b) == 1 even when a and/or b can be negative.
So I would agree that it is easy to conclude that the gcd is not defined
for negative numbers.  But, of those maths texts that explicitly cover
the behaviour of the gcd for negative numbers, I do not know of any that
do not define gcd(a, b) to be gcd(|a|, |b|).

> One other thought: if we're really intending for gcd to be used independently 
> of the fractions module, perhaps it should be exposed as math.gcd.  (That 
> would also give the opportunity for an optimised C version.)

To me it makes more sense to put this in math as this is where I would
expect to find it.  But a comment on comp.lang.python was not in favour
of this.

----------
nosy: +gladman

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue22477>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to