[Numpy-discussion] max value of np scalars

Travis Oliphant oliphant at enthought.com
Wed Sep 30 09:54:49 EDT 2009


On Sep 29, 2009, at 4:14 PM, Charles R Harris wrote:

>
>
> On Tue, Sep 29, 2009 at 2:52 PM, Neal Becker <ndbecker2 at gmail.com>  
> wrote:
> I need the max value of an np scalar type.  I had used this code:
>
> def get_max(is_signed, base_type, total_bits):
>    print 'get_max:', is_signed, base_type, total_bits
>    if is_signed:
>        return (~(base_type(-1) << (total_bits-1)))
>    else:
>        print type(base_type (-1) << total_bits)
>        return (~(base_type (-1) << total_bits))
>
> This doesn't work for e.g., np.uint64.  As the 'print' shows,
>  get_max: False <type 'numpy.uint64'> 10
> <type 'long'>
>
> The type of np.uint64 (-1) << 10 is not np.uint64, but long.  This  
> seems
> very strange to me.
>
> So, 2 questions.
>
> 1) Is this expected behavior?
>
> 2) How can I correctly implement get_max?
>
> Some odd behavior here:
>
> In [24]: left_shift(uint64(-1), 1)
> Out[24]: 36893488147419103230L
>
> In [25]: type(left_shift(uint64(-1), 1))
> Out[25]: <type 'long'>
>
> In [26]: type(left_shift(uint32(-1), 1))
> Out[26]: <type 'numpy.int64'>
>
> In [27]: type(uint32(-1))
> Out[27]: <type 'numpy.uint32'>
>
> In [28]: type(left_shift(uint32(-1), 1))
> Out[28]: <type 'numpy.int64'>
>
> In [29]: type(uint64(-1))
> Out[29]: <type 'numpy.uint64'>
>
> I don't think the arguments should be promoted for what should(?) be  
> bitwise operations. Needs some discussion.

Yes, this is a dusty corner that needs some cleaning.

-Travis




-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20090930/5d5278b6/attachment.html>


More information about the NumPy-Discussion mailing list