summaryrefslogtreecommitdiff
path: root/numeric.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-08-30 03:02:35 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-08-30 03:02:35 +0000
commit59b1cef2f12112cbd515bf1bcfb8b1997538db48 (patch)
tree0b91be76f32fef5a10f318ed789117290ed6290f /numeric.c
parent74ef5a647fa0b42e6be22c4734a98150473825c2 (diff)
* 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.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/numeric.c b/numeric.c
index 3000158be1..255b6b52b4 100644
--- a/numeric.c
+++ b/numeric.c
@@ -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);
}