On 6/4/2016 10:23 PM, Charles R Harris wrote:
From my point of view, backwards compatibility is the main reason for
choosing 1, otherwise I'd pick 2. If it weren't so easy to get
floating point by using floating exponents I'd probably choose
differently.

As an interested user, I offer a summary of
some things I believe are being claimed about
the two proposals on the table (for int**int),
which are are:
1. raise an error for negative powers
2. always return float
Here is a first draft comparison (for int**int only)

Proposal 1. effectively throws away an operator
  - true in this:
    np.arange(10)**10 already overflows
    even for int32 much less smaller sizes,
    and negative powers are now errors
  - fale in this:
    you can change an argument to float

Proposal 1. effectively behaves more like Python
  - true in this:
    for a very small range of numbers, int**int will
    return int in Python 2
  - false in this:
    In Python, negative exponents produce floats,
    and int**int does not overflow

Proposal 1 is more backwards compatible:
  true, but this really only affects int**2
  (larger arguments quickly overflow)

Proposal 2 is a better match for other languages:
  basically true (see e.g., C++'s overloaded `pow`)

Proposal 2 better satisfies the principle of least surprise:
  probably true for most users,
  possibly false for some


Feel free to add, correct, modify.  I think there is a strong
argument to always return float, and the real question is
whether it is strong enough tosacrifice backwards compatibility.

Hope this summary is of some use and not too tendentious,
Alan

_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
https://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to