From: Johan Holmberg Date: 2006-10-07T05:14:45+09:00 Subject: Bug: right shift (>>) for Bignum? Hi! I think I have stumbled on a bug in the right shift method on Bignums. An expression like (1 - 2**i) >> (i+1) normally gives a value of -1 (i.e. minus one). But when the shift amount is near a multiple of 32 (or 64 on 64-bit architectures) it suddenly gives a value of 0 (i.e. zero) instead. A unit test demonstrating the problem is given below. On my IMac running OS-X I get an error when i=31. I am using Ruby 1.8.5. -------------------------------- require "test/unit" class TC_bignum_rshift_bug < Test::Unit::TestCase def test_rshift_bug (1..100).each do |i| assert_equal( -1, (1 - 2**i) >> (i+1), "shift steps: #{i}" ) end end end -------------------------------- Regards, Johan Holmberg