diff --git a/scheme/last-revision b/scheme/last-revision index 6d8d0c9..af2b5c5 100644 --- a/scheme/last-revision +++ b/scheme/last-revision @@ -1 +1 @@ -1656 +1657 diff --git a/src/ikarus-numerics.c b/src/ikarus-numerics.c index ff7ef13..5dcabfc 100644 --- a/src/ikarus-numerics.c +++ b/src/ikarus-numerics.c @@ -2124,11 +2124,23 @@ ikrt_exact_bignum_sqrt(ikptr bn, ikpcb* pcb){ ikptr ikrt_flonum_hash(ikptr x /*, ikpcb* pcb */) { - return fix(0); + short* buf = (short*)(x+off_flonum_data); + return fix(((long)buf[0]) ^ + ((long)buf[1] << 3) ^ + ((long)buf[3] << 7) ^ + ((long)buf[2] << 11)); } ikptr -ikrt_bignum_hash(ikptr x /*, ikpcb* pcb */) { - return fix(0); +ikrt_bignum_hash(ikptr bn /*, ikpcb* pcb */) { + ikptr fst = ref(bn, -vector_tag); + long int limb_count = bnfst_limb_count(fst); + long h = (long)fst; + mp_limb_t* dat = (mp_limb_t*)(bn+off_bignum_data); + long i; + for (i=0; i