Test win: -6213077893701800743 Test perl: -6213077893701849127 #### my $i = Math::BigInt->new('0'); #### $z = -(0x10000000000000000 - $i) if 0x8000000000000000 & $i; # line 115 Integer overflow in hexadecimal number at ./testgen line 115 (#1) (W overflow) The hexadecimal, octal or binary number you have specified either as a literal or as an argument to hex() or oct() is too big for your architecture, and has been converted to a floating point number. On a 32-bit architecture the largest hexadecimal, octal or binary number representable without overflow is 0xFFFFFFFF, 037777777777, or 0b11111111111111111111111111111111 respectively. Note that Perl transparently promotes all numbers to a floating point representation internally--subject to loss of precision errors in subsequent operations.