ref: 9b064b44312f1125bd4af59f9c27df69834ddc2f
parent: 53a2fafa398442453ae0e0980005f16b671d6400
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Sun Jan 5 22:47:22 EST 2025
mptod: don't shift by 64
--- a/3rd/mp/mptod.c
+++ b/3rd/mp/mptod.c
@@ -7,7 +7,8 @@
{
uint64_t v;
mpdigit w, r;
- int sf, i, n, m, s;
+ int sf, i, n;
+ uint32_t m, s;
FPdbleword x;
if(a->top == 0) return 0.0;
@@ -29,9 +30,14 @@
else
w = a->p[i];
m = 54 - n;
- if(m > Dbits) m = Dbits;
+ if(m > Dbits){
+ m = Dbits;
+ v = 0;
+ }else{
+ v <<= m;
+ }
s = Dbits - m & Dbits - 1;
- v = v << m | w >> s;
+ v |= w >> s;
r = w & (1ULL<<s) - 1;
n += m;
}