From: Koji Arai Date: 2002-03-02T03:11:26+09:00 Subject: [ruby-dev:16163] Re: Hash implementation 新井です。 そういえば、1.6 の hash.c rb_any_hash() で、 if (!FIXNUM_P(hval)) { hval = rb_funcall(hval, '%', 1, INT2FIX(65439)); } となってますが、65439 というのはどこから来た数値なんでしょう? $ ruby -rmathn -e 'p 65439.prime_division' [[3, 2], [11, 1], [661, 1]] っと素数じゃないですよねえ。1.7 では、以下のように昔のまま です。 DEFER_INTS; hval = rb_funcall(a, id_hash, 0); if (FIXNUM_P(hval)) { hval %= 536870917; } else { hval = rb_funcall(hval, '%', 1, INT2FIX(536870917)); } ENABLE_INTS; $ ruby -rmathn -e 'p 536870917.prime_division' [[11, 1], [103, 1], [613, 1], [773, 1]] こっちも素数じゃない。以前、st.c の primes を素数に直して頂 きましたがこっちも直した方がいいんじゃないかな? -- 新井康司 (Koji Arai)