Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > 32 bit arithmetic in 2.3+

Reply
Thread Tools

32 bit arithmetic in 2.3+

 
 
Robin Becker
Guest
Posts: n/a
 
      10-23-2003
I'm sure we've had this discussion before, but I'm getting a bunch of
problems related to various algorithms related to 32 bit arithmetic.

The particular error/warnings I'm seeing are

FutureWarning: hex/oct constants > sys.maxint will return positive
values in Python 2.4 and up

FutureWarning: x<<y losing bits or changing sign will return a long in
Python 2.4 and up

related to the use of 0x81020304 and << respectively.

Can someone tell me

1) What feature makes these warnings errors?

2) What's the right way to do the bit shifting modulo 32 bits?
The same kinds of problems exist in java, but we don't get the warnings
regarding the use of 0x80000000. Do I need to replace all 0x8........
numbers with the L version and ensure all << shifts are masked with
0xffffffffL ? Surely there will be some compatibility issues.
--
Robin Becker
 
Reply With Quote
 
 
 
 
Bengt Richter
Guest
Posts: n/a
 
      10-26-2003
On Thu, 23 Oct 2003 11:10:28 +0100, Robin Becker <(E-Mail Removed)> wrote:

>I'm sure we've had this discussion before, but I'm getting a bunch of
>problems related to various algorithms related to 32 bit arithmetic.
>
>The particular error/warnings I'm seeing are
>
>FutureWarning: hex/oct constants > sys.maxint will return positive
>values in Python 2.4 and up
>
>FutureWarning: x<<y losing bits or changing sign will return a long in
>Python 2.4 and up
>
>related to the use of 0x81020304 and << respectively.
>
>Can someone tell me
>
>1) What feature makes these warnings errors?
>
>2) What's the right way to do the bit shifting modulo 32 bits?
>The same kinds of problems exist in java, but we don't get the warnings
>regarding the use of 0x80000000. Do I need to replace all 0x8........
>numbers with the L version and ensure all << shifts are masked with
>0xffffffffL ? Surely there will be some compatibility issues.


I guess the messages mean that your int objects are not the same as what int is
to mean soon. So maybe being explicit might be the way to go? E.g.,

class int32(int):
# ... make it work the way you want... or make a separate int32 extension

and use int32 instances where you have int instances now? It would also document
your 32-bit assumptions/requirements.

What do your 32-bit entities represent? Perhaps there is something even more
appropriate than integers?

If you do need good-old-32-bit-ints modeling typical 32-bit ALU behavior, and a
lot of people need that, maybe there ought to be a built-in int32 type, or a
parameterized fixed-width metatype, so you could say int32 = int_fixed_width(32)
or int_sixty_four = int_fixed_width(64) etc. and tie into efficient implementation.

Just a few rambling thoughts...

Regards,
Bengt Richter
 
Reply With Quote
 
 
 
 
Robin Becker
Guest
Posts: n/a
 
      10-26-2003
In article <bnfq46$8v1$0@216.39.172.122>, Bengt Richter <(E-Mail Removed)>
writes
..
.......
>
>I guess the messages mean that your int objects are not the same as what int is
>to mean soon. So maybe being explicit might be the way to go? E.g.,
>
> class int32(int):
> # ... make it work the way you want... or make a separate int32
>extension
>
>and use int32 instances where you have int instances now? It would also
>document
>your 32-bit assumptions/requirements.
>
>What do your 32-bit entities represent? Perhaps there is something even more
>appropriate than integers?


I think you're right. These things represent the checksums done in
typical C code where int means 32 bit unsigned. Of course the C code
will go wrong when it moves to a 64 bit machine, but I didn't design
true type fonts or the pdf encryption algorithms.
>
>If you do need good-old-32-bit-ints modeling typical 32-bit ALU behavior, and a
>lot of people need that, maybe there ought to be a built-in int32 type, or a
>parameterized fixed-width metatype, so you could say int32 =
>int_fixed_width(32)
>or int_sixty_four = int_fixed_width(64) etc. and tie into efficient
>implementation.
>


This seems like an excellent idea. I suppose it could be done in Python
first to provide a reference implementation.

>Just a few rambling thoughts...
>
>Regards,
>Bengt Richter


It seems a bit funny to issue Future Warnings about things that I cannot
import a __future__ feature and test any fix.
--
Robin Becker
 
Reply With Quote
 
Miki Tebeka
Guest
Posts: n/a
 
      10-26-2003
Hello Robin,

> I'm sure we've had this discussion before, but I'm getting a bunch of
> problems related to various algorithms related to 32 bit arithmetic.
>
> The particular error/warnings I'm seeing are
>
> FutureWarning: hex/oct constants > sys.maxint will return positive
> values in Python 2.4 and up
>
> FutureWarning: x<<y losing bits or changing sign will return a long in
> Python 2.4 and up
>
> related to the use of 0x81020304 and << respectively.
>
> Can someone tell me
>
> 1) What feature makes these warnings errors?

Currently bitwise operation are on the system "native" types.
In 2.4 they will be a "logical" operation since ints and long ints
will be unified.
currently:
>>> 1<<64

__main__:1: FutureWarning: x<<y losing bits or changing sign will
return a long in Python 2.4 and up
0
>>> 1L<<64

18446744073709551616L
>>>

In 2.4 and up 1<<64 will give the same result as 1L<<64

> 2) What's the right way to do the bit shifting modulo 32 bits?
> The same kinds of problems exist in java, but we don't get the warnings
> regarding the use of 0x80000000. Do I need to replace all 0x8........
> numbers with the L version and ensure all << shifts are masked with
> 0xffffffffL ? Surely there will be some compatibility issues.

IMO this is the best way.
def lshift32(n):
return (n << 32) & (0xFFFFFFFF)

HTH.
Miki
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
What is the point of having 16 bit colour if a computer monitor can only display 8 bit colour? How do you edit 16 bit colour when you can only see 8 bit? Scotius Digital Photography 6 07-13-2010 03:33 AM
Arithmetic for 32-bit and 64-bit machines Why Tea C Programming 10 01-10-2008 07:36 AM
Usual Arithmetic Conversions-arithmetic expressions joshc C Programming 5 03-31-2005 02:23 AM
64 bit - Windows Liberty 64bit, Windows Limited Edition 64 Bit, Microsoft SQL Server 2000 Developer Edition 64 Bit, IBM DB2 64 bit - new ! vvcd Computer Support 0 09-17-2004 08:15 PM
64 bit - Windows Liberty 64bit, Windows Limited Edition 64 Bit,Microsoft SQL Server 2000 Developer Edition 64 Bit, IBM DB2 64 bit - new! Ionizer Computer Support 1 01-01-2004 07:27 PM



Advertisments