On Mar 31, 1:27 pm, Daniel Azuma <daz... / gmail.com> wrote: > Hello all, > > Just making a quick note of a bug we found in Bignum.to_s in Ruby 1.8.6, > in case it burns anyone else. > > Examples: > > irb(main):001:0> 18446744073709551615.to_s(36) # should be > "3w5e11264sgsf" > => "w5e11264sgsf" > irb(main):002:0> -18446744073709551615.to_s(8) # should be > "-1777777777777777777777" > => "11777777777777777777777" > > The bug affects bases 8, 9, and 32-36 inclusive, over certain ranges of > values depending on the base. Values immediately less than 2**64 seem to > be particularly affected. For example, in base 36, all values from > 4738381338321616896 through 18446744073709551615 (which is 2**64-1) will > fail. > > It manifests only in Ruby 1.8.6. Ruby 1.8.5 works correctly. (It appears > that some optimization work went a little too far.) > > For anyone affected by this, I filed the bug on RubyForge, and posted a > possible "works for me, but use at your own risk" fix to bignum.c: > > http://rubyforge.org/tracker/?func=detail&aid=9410&group_id=426&atid=... > > Cheers, > Daniel Azuma > Chief Architect, Zoodango.com > > -- > Posted viahttp://www.ruby-forum.com/. I have verified that the bignum bug you described also occurs in ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32] C:\Documents and Settings\Owner>irb irb(main):001:0> 18446744073709551615.to_s => "18446744073709551615" irb(main):002:0> 18446744073709551615.to_s(32) => "vvvvvvvvvvvv" irb(main):003:0> 18446744073709551616.to_s(32) => "g000000000000" irb(main):004:0> 18446744073709551615.to_s(36) => "w5e11264sgsf" irb(main):005:0> 18446744073709551616.to_s(36) => "3w5e11264sgsg" irb(main):006:0> 18446744073709551615.to_s(31) => "nd075ib45k86f" irb(main):007:0> 18446744073709551616.to_s(31) => "nd075ib45k86g"