diff --git a/src/core/value.c b/src/core/value.c index 4e001cbf..5da86bda 100644 --- a/src/core/value.c +++ b/src/core/value.c @@ -307,18 +307,10 @@ int32_t janet_hash(Janet x) { hash = janet_struct_hash(janet_unwrap_struct(x)); break; case JANET_NUMBER: { - double num = janet_unwrap_number(x); - if (isnan(num) || isinf(num) || num == 0) { - hash = 0; - } else { - hash = (int32_t)num; - hash = ((hash >> 16) ^ hash) * 0x45d9f3b; - hash = ((hash >> 16) ^ hash) * 0x45d9f3b; - hash = (hash >> 16) ^ hash; - - uint32_t lo = (uint32_t)(janet_u64(x) & 0xFFFFFFFF); - hash ^= lo + 0x9e3779b9 + (hash << 6) + (hash >> 2); - } + uint64_t i = janet_u64(x); + uint32_t lo = (uint32_t)(i & 0xFFFFFFFF); + uint32_t hi = (uint32_t)(i >> 32); + hash = (int32_t)(hi ^ (lo >> 3)); break; } case JANET_ABSTRACT: {