[Numpy-discussion] find_common_type broken?

Travis Oliphant oliphant at enthought.com
Mon Jul 20 16:00:20 EDT 2009


On Jul 16, 2009, at 12:59 AM, Ralf Gommers wrote:

>
>
> This is not a problem with r_.  This is correct behavior.   A scalar  
> "float" will not cause an array "float32" to be upcast.
>
> This was at first counter-intuitive but I found the reason for it in  
> Guide to Numpy now:
>
> "Mixed scalar-array operations use a different set of casting rules  
> that ensure that
> a scalar cannot upcast an array unless the scalar is of a  
> fundamentally different kind
> of data (i.e. under a different hierarchy in the data type  
> hierarchy) then the array.
> This rule enables you to use scalar constants in your code (which as  
> Python types
> are interpreted accordingly in ufuncs) without worrying about  
> whether the precision
> of the scalar constant will cause upcasting on your large (small  
> precision) array."
>
> Makes sense.
>
> Nonetheless, the OP did point out a flaw in find_common_type that  
> has been fixed in r7133.
>
> Great, it works for me now.
>
> There is still one rule I do not understand the reason for. Out of  
> curiosity, what is the reason for this:
> In [16]: can_cast(int32, float32)
> Out[16]: False
> In [17]: can_cast(int64, float64)
> Out[17]: True

To prevent proliferation of float128 or float96 (i.e. longdouble's in  
a commonly used case).    Not a very pretty exceptional case, but  
definitely useful.

Thanks,

-Travis

--
Travis Oliphant
Enthought Inc.
1-512-536-1057
http://www.enthought.com
oliphant at enthought.com








More information about the NumPy-Discussion mailing list