Project

General

Profile

Backport #2338

大きなFixnumを値にもつHash#hashが呼び出しごとに変わる

Added by yugui (Yuki Sonoda) almost 10 years ago. Updated over 8 years ago.

Status:
Closed
Priority:
Normal

Description

=begin
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 => 261})
=> true
{:a => 2
61}.hash == {:a => 2*61}.hash

=> false

簡単に試してみたところ、値が2*61から262-1の範囲で起きるようです。
32bitの場合は2
29から2*30-1の範囲で同様の現象が発生します。
=end


Related issues

Related to Ruby 1.8 - Bug #2334: 大きなFixnumを値にもつHash#hashが呼び出しごとに変わるClosed11/04/2009Actions

History

#1

Updated by naruse (Yui NARUSE) almost 10 years ago

=begin
成瀬です。

2009/11/05 12:24, Moru wrote:

モルと申します。

以下の環境で再現してみました。結論から言うとhashを繰り返して呼び出しても
変更はありませんでした。
そしてBignumの範囲についてもYuguiさんがおっしゃったのと少しは違うところ
があるようです。

~$ uname -a
SunOS kaeko 5.11 snv_111b i86pc i386 i86pc Solaris

~$ isainfo -n
amd64 #=> 基本的に64bitと環境で動いています。

たしかにシステムは amd64 なのでしょうが、

~$ ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-solaris2.11] #=> p72なので
p174と何とか違うところがあるかもと思います。

i386-solaris2.11 とあるので、
このバイナリは 32bit になっていると思われます。
これは configure のバグだろうか。

(2*61 -1).class
^ 累乗になっていません

--
NARUSE, Yui naruse@airemix.jp

=end

#2

Updated by naruse (Yui NARUSE) almost 10 years ago

  • Status changed from Open to Assigned
  • Assignee set to yugui (Yuki Sonoda)

=begin
backport r22308 (=r25660+25661)
=end

#3

Updated by yugui (Yuki Sonoda) almost 10 years ago

  • Status changed from Assigned to Closed

=begin
Applied at r25938
=end

Also available in: Atom PDF