93 #define _reent _Jv_reent 94 #define _Bigint _Jv_Bigint 96 #define _REENT_CHECK_MP(x) 97 #define _REENT_MP_FREELIST(x) ((x)->_freelist) 98 #define _REENT_MP_P5S(x) ((x)->_p5s) 106 char *result = (
char *) malloc (x1 * x2);
107 memset (result, 0, x1 * x2);
129 else if (new_k > ptr->_max_k)
131 struct _Bigint **new_list = (
struct _Bigint **) realloc (ptr->_freelist,
132 new_k * sizeof (
struct _Bigint *));
133 memset (&new_list[ptr->_max_k], 0, (new_k - ptr->_max_k) * sizeof (
struct _Bigint *));
134 ptr->_freelist = new_list;
139 assert (k <= ptr->_max_k);
155 rv->_sign = rv->_wds = 0;
187 y = (xi & 0xffff) * m + a;
188 z = (xi >> 16) * m + (y >> 16);
190 *x++ = (z << 16) + (y & 0xffff);
200 if (wds >= b->_maxwds)
202 b1 =
Balloc (ptr, b->_k + 1);
213 #if defined (ENABLE_UNUSED_FUNCTION) 222 for (k = 0, y = 1; x > y; y <<= 1, k++);
229 b->_x[0] = y9 & 0xffff;
230 b->_wds = (b->_x[1] = y9 >> 16) ? 2 : 1;
238 b =
multadd (ptr, b, 10, *s++ -
'0');
245 b =
multadd (ptr, b, 10, *s++ -
'0');
255 if (!(x & 0xffff0000))
260 if (!(x & 0xff000000))
265 if (!(x & 0xf0000000))
270 if (!(x & 0xc0000000))
275 if (!(x & 0x80000000))
278 if (!(x & 0x40000000))
351 __ULong *x, *xa, *xae, *xb, *xbe, *xc, *xc0;
356 if (a->_wds < b->_wds)
369 for (x = c->_x, xa = x + wc; x < xa; x++)
377 for (; xb < xbe; xb++, xc0++)
379 if ((y = *xb & 0xffff) != 0)
386 z = (*x & 0xffff) * y + (*xc & 0xffff) + carry;
388 z2 = (*x++ >> 16) * y + (*xc >> 16) + carry;
395 if ((y = *xb >> 16) != 0)
403 z = (*x & 0xffff) * y + (*xc >> 16) + carry;
406 z2 = (*x++ >> 16) * y + (*xc & 0xffff) + carry;
414 for (; xb < xbe; xc0++)
423 z = *x++ * y + *xc + carry;
432 for (xc0 = c->_x, xc = xc0 + wc; wc > 0 && !*--xc; --wc);
442 static _CONST int p05[3] = { 5, 25, 125 };
444 if ((i = k & 3) != 0)
445 b =
multadd (ptr, b, p05[i - 1], 0);
460 b1 =
mult (ptr, b, p5);
466 if (!(p51 = p5->_next))
468 p51 = p5->_next =
mult (ptr, p5, p5);
489 n1 = n + b->_wds + 1;
490 for (i = b->_maxwds; n1 > i; i <<= 1)
494 for (i = 0; i < n; i++)
519 *x1++ = (*x << k & 0xffff) | z;
545 if (i > 1 && !a->_x[i - 1])
546 Bug (
"cmp called with a->_x[a->_wds-1] == 0");
547 if (j > 1 && !b->_x[j - 1])
548 Bug (
"cmp called with b->_x[b->_wds-1] == 0");
559 return *xa < *xb ? -1 : 1;
572 __ULong *xa, *xae, *xb, *xbe, *xc;
607 y = (*xa & 0xffff) - (*xb & 0xffff) + borrow;
610 z = (*xa++ >> 16) - (*xb++ >> 16) + borrow;
618 y = (*xa & 0xffff) + borrow;
621 z = (*xa++ >> 16) + borrow;
629 y = *xa++ - *xb++ + borrow;
649 #if defined (ENABLE_UNUSED_FUNCTION) 659 #ifndef Sudden_Underflow 667 #ifndef _DOUBLE_IS_32BITS 671 #ifndef Sudden_Underflow 678 word0 (a) = 0x80000 >> L;
679 #ifndef _DOUBLE_IS_32BITS 687 #ifndef _DOUBLE_IS_32BITS 688 word1 (a) = L >= 31 ? 1 : 1 << (31 - L);
714 Bug (
"zero y in b2d");
722 w = xa > xa0 ? *--xa : 0;
723 #ifndef _DOUBLE_IS_32BITS 724 d1 = y << ((32 -
Ebits) + k) | w >> (
Ebits - k);
728 z = xa > xa0 ? *--xa : 0;
731 d0 =
Exp_1 | y << k | z >> (32 - k);
732 y = xa > xa0 ? *--xa : 0;
733 #ifndef _DOUBLE_IS_32BITS 734 d1 = z << k | y >> (32 - k);
740 #ifndef _DOUBLE_IS_32BITS 747 z = xa > xa0 ? *--xa : 0;
749 w = xa > xa0 ? *--xa : 0;
750 y = xa > xa0 ? *--xa : 0;
754 z = xa > xa0 ? *--xa : 0;
755 w = xa > xa0 ? *--xa : 0;
757 d0 =
Exp_1 | y << (k + 16) | z << k | w >> (16 - k);
758 y = xa > xa0 ? *--xa : 0;
759 d1 = w << (k + 16) | y << k;
763 word0 (d) = d0 >> 16 | d0 << 16;
764 word1 (d) = d1 >> 16 | d1 << 16;
802 #ifdef Sudden_Underflow 812 #ifndef _DOUBLE_IS_32BITS 819 x[0] = y | z << (32 - k);
824 i = b->_wds = (x[1] = z) ? 2 : 1;
831 Bug (
"Zero passed to d2b");
836 #ifndef _DOUBLE_IS_32BITS 848 x[0] = y | (z << (32 - k) & 0xffff);
849 x[1] = z >> (k - 16) & 0xffff;
856 x[1] = y >> 16 | (z << (16 - k) & 0xffff);
857 x[2] = z >> k & 0xffff;
858 x[3] = z >> (k + 16);
874 Bug (
"Zero passed to d2b");
894 #ifndef Sudden_Underflow 899 *e = (de -
Bias - (
PREC - 1) << 2) + k;
905 #ifndef Sudden_Underflow 909 *e = de -
Bias - (
PREC - 1) + 1 + k;
911 *bits = 32 * i -
hi0bits (x[i - 1]);
913 *bits = (i + 2) * 16 - hi0bits (x[i]);
923 #if defined (ENABLE_UNUSED_FUNCTION) 933 k = ka - kb + 32 * (a->_wds - b->_wds);
935 k = ka - kb + 16 * (a->_wds - b->_wds);
965 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9,
966 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19,
967 1e20, 1e21, 1e22, 1e23, 1e24
970 #if !defined(_DOUBLE_IS_32BITS) && !defined(__v800) 975 _CONST double bigtens[] = { 1e16, 1e32 };
977 _CONST double tinytens[] = { 1e-16, 1e-32 };
980 #if defined (ENABLE_UNUSED_FUNCTION) 983 _DEFUN (_mprec_log10, (dig),
int dig)
#define Sign_Extend(a, b)
static void * mprec_calloc(void *ignore, size_t x1, size_t x2)
_Bigint * _DEFUN(Balloc,(ptr, k), struct _reent *ptr _AND int k)
#define Storeinc(a, b, c)
#define _REENT_MP_FREELIST(x)
#define _REENT_CHECK_MP(x)