From: Yuki Sonoda Date: 2009-11-05T11:08:40+09:00 Subject: [ruby-dev:39642] [Bug #2338] 大きなFixnumを値にもつHash#hashが呼び出しごとに変わる Bug #2338: 大きなFixnumを値にもつHash#hashが呼び出しごとに変わる http://redmine.ruby-lang.org/issues/show/2338 起票者: Yuki Sonoda ステータス: Open, 優先度: High ruby -v: ruby 1.9.1p326 (2009-10-31 revision 25600) [i386-darwin9.8.0] Yuguiです。1.9.1でも再現を確認しましたのでチケットをコピーします。 -- 大きなFixnumを値にもつHashについてHash#hashの値が呼び出しごとに変わります。 % ruby -v ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin10] % irb --simple-prompt >> h = {:a => 2**61} => {:a=>2305843009213693952} >> h.hash => 3933384 >> h.hash => 4179968 >> (2**61).class => Fixnum >> (2**62).class => Bignum 関連してだと思うのですが h1.eql? h2 # => true であるにもかかわらず h1.hash == h2.hash # => false となることがあります。 https://trac.macports.org/ticket/22361 % irb --simple-prompt >> {:a => 2**61}.eql?({:a => 2**61}) => true >> {:a => 2**61}.hash == {:a => 2**61}.hash => false 簡単に試してみたところ、値が2**61から2**62-1の範囲で起きるようです。 32bitの場合は2**29から2**30-1の範囲で同様の現象が発生します。 ---------------------------------------- http://redmine.ruby-lang.org