diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2006-08-30 03:02:35 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2006-08-30 03:02:35 +0000 |
commit | 59b1cef2f12112cbd515bf1bcfb8b1997538db48 (patch) | |
tree | 0b91be76f32fef5a10f318ed789117290ed6290f /numeric.c | |
parent | 74ef5a647fa0b42e6be22c4734a98150473825c2 (diff) | |
download | ruby-59b1cef2f12112cbd515bf1bcfb8b1997538db48.tar.gz |
* numeric.c (flo_hash): improve collision.
* string.c (rb_memhash): new generic function to calculate hash value
for memory chunk.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@10798 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'numeric.c')
-rw-r--r-- | numeric.c | 8 |
1 files changed, 2 insertions, 6 deletions
@@ -836,15 +836,11 @@ static VALUE flo_hash(VALUE num) { double d; - char *c; - int i, hash; + int hash; d = RFLOAT(num)->value; if (d == 0) d = fabs(d); - c = (char*)&d; - for (hash=0, i=0; i<sizeof(double);i++) { - hash += c[i] * 971; - } + hash = rb_memhash(&d, sizeof(d)) ^ RBASIC(num)->klass; if (hash < 0) hash = -hash; return INT2FIX(hash); } |