On 12/6/11, Steven D'Aprano <steve+comp.lang.pyt...@pearwood.info> wrote: > I have some bit-twiddling code written in Java which I am trying to port > to Python.: > > long newSeed = (seed & 0xFFFFFFFFL) * 0x41A7L; > while (newSeed >= 0x80000000L) { > newSeed = (newSeed & 0x7FFFFFFFL) + (newSeed >>> 31L); > } > seed = (newSeed == 0x7FFFFFFFL) ? 0 : (int)newSeed;
I suspect the problem lies somewhere other than the java and python code you posted. I'm having a bit of a time finding an input value of seed that gives two different results, despite throwing some hard-feeling test cases and lots of random values, using both a 32 bit and a 64 bit JVM. I believe java likes to treat strings like Python 3, but if you use "export LC_ALL=en_US.ISO-8859-1", then it'll behave a little more like Python 2 in that strings have an 8 bit encoding (or at least act like it) that's round-tripable. If worse comes to worse, you could probably write some test harness code for each of the java and python, and then feed them the same inputs - to see which pieces differ and which don't. -- http://mail.python.org/mailman/listinfo/python-list