Lines Matching +full:a +full:- +full:z
39 #define PRIVATE_mem ((PRIVATE_MEM+sizeof(double)-1)/sizeof(double))
61 freelist[k] = rv->next;
66 rv = (Bigint *)MALLOC(sizeof(Bigint) + (x-1)*sizeof(ULong));
68 len = (sizeof(Bigint) + (x-1)*sizeof(ULong) + sizeof(double) - 1)
70 if (k <= Kmax && pmem_next - private_mem + len <= PRIVATE_mem) {
77 rv->k = k;
78 rv->maxwds = x;
81 rv->sign = rv->wds = 0;
94 if (v->k > Kmax)
102 v->next = freelist[v->k];
103 freelist[v->k] = v;
160 (b, m, a) Bigint *b; int m, a; in multadd()
162 (Bigint *b, int m, int a) /* multiply by m and add a */
172 ULong xi, z; local
177 wds = b->wds;
178 x = b->x;
180 carry = a;
190 z = (xi >> 16) * m + (y >> 16);
191 carry = z >> 16;
192 *x++ = (z << 16) + (y & 0xffff);
202 if (wds >= b->maxwds) {
203 b1 = Balloc(b->k+1);
208 b->x[wds++] = carry;
209 b->wds = wds;
259 b->x[0] = i;
260 b->wds = 1;
267 (a, b) Bigint *a, *b; in mult() argument
269 (Bigint *a, Bigint *b)
277 ULLong carry, z; local
279 ULong carry, z; local
285 if (a->wds < b->wds) {
286 c = a;
287 a = b;
290 k = a->k;
291 wa = a->wds;
292 wb = b->wds;
294 if (wc > a->maxwds)
297 for(x = c->x, xa = x + wc; x < xa; x++)
299 xa = a->x;
301 xb = b->x;
303 xc0 = c->x;
311 z = *x++ * (ULLong)y + *xc + carry;
312 carry = z >> 32;
313 *xc++ = z & 0xffffffffUL;
327 z = (*x & 0xffff) * y + (*xc & 0xffff) + carry;
328 carry = z >> 16;
331 Storeinc(xc, z2, z);
342 z = (*x & 0xffff) * y + (*xc >> 16) + carry;
343 carry = z >> 16;
344 Storeinc(xc, z, z2);
359 z = *x++ * y + *xc + carry;
360 carry = z >> 16;
361 *xc++ = z & 0xffff;
369 for(xc0 = c->x, xc = xc0 + wc; wc > 0 && !*--xc; --wc) ;
370 c->wds = wc;
389 b = multadd(b, p05[i-1], 0);
399 p5->next = 0;
404 p5->next = 0;
415 if ((p51 = p5->next) == 0) {
418 if (!(p51 = p5->next)) {
419 p51 = p5->next = mult(p5,p5);
420 p51->next = 0;
424 p51 = p5->next = mult(p5,p5);
425 p51->next = 0;
443 ULong *x, *x1, *xe, z; local
446 k1 = b->k;
447 n1 = n + b->wds + 1;
448 for(i = b->maxwds; n1 > i; i <<= 1)
451 x1 = b1->x;
454 x = b->x;
455 xe = x + b->wds;
458 k1 = 32 - k;
459 z = 0;
461 *x1++ = *x << k | z;
462 z = *x++ >> k1;
465 if ((*x1 = z) !=0)
468 k1 = 16 - k;
469 z = 0;
471 *x1++ = *x << k & 0xffff | z;
472 z = *x++ >> k1;
475 if (*x1 = z)
482 b1->wds = n1 - 1;
490 (a, b) Bigint *a, *b; in cmp() argument
492 (Bigint *a, Bigint *b)
498 i = a->wds;
499 j = b->wds;
501 if (i > 1 && !a->x[i-1])
502 Bug("cmp called with a->x[a->wds-1] == 0");
503 if (j > 1 && !b->x[j-1])
504 Bug("cmp called with b->x[b->wds-1] == 0");
506 if (i -= j)
508 xa0 = a->x;
510 xb0 = b->x;
513 if (*--xa != *--xb)
514 return *xa < *xb ? -1 : 1;
524 (a, b) Bigint *a, *b; in diff() argument
526 (Bigint *a, Bigint *b)
537 ULong z; local
541 i = cmp(a,b);
544 c->wds = 1;
545 c->x[0] = 0;
549 c = a;
550 a = b;
556 c = Balloc(a->k);
557 c->sign = i;
558 wa = a->wds;
559 xa = a->x;
561 wb = b->wds;
562 xb = b->x;
564 xc = c->x;
568 y = (ULLong)*xa++ - *xb++ - borrow;
574 y = *xa++ - borrow;
581 y = (*xa & 0xffff) - (*xb & 0xffff) - borrow;
583 z = (*xa++ >> 16) - (*xb++ >> 16) - borrow;
584 borrow = (z & 0x10000) >> 16;
585 Storeinc(xc, z, y);
589 y = (*xa & 0xffff) - borrow;
591 z = (*xa++ >> 16) - borrow;
592 borrow = (z & 0x10000) >> 16;
593 Storeinc(xc, z, y);
597 y = *xa++ - *xb++ - borrow;
603 y = *xa++ - borrow;
609 while(!*--xc)
610 wa--;
611 c->wds = wa;
618 (a, e) Bigint *a; int *e; in b2d() argument
620 (Bigint *a, int *e)
623 ULong *xa, *xa0, w, y, z; local
633 xa0 = a->x;
634 xa = xa0 + a->wds;
635 y = *--xa;
640 *e = 32 - k;
643 d0 = Exp_1 | y >> (Ebits - k);
644 w = xa > xa0 ? *--xa : 0;
645 d1 = y << ((32-Ebits) + k) | w >> (Ebits - k);
648 z = xa > xa0 ? *--xa : 0;
649 if (k -= Ebits) {
650 d0 = Exp_1 | y << k | z >> (32 - k);
651 y = xa > xa0 ? *--xa : 0;
652 d1 = z << k | y >> (32 - k);
656 d1 = z;
660 z = xa > xa0 ? *--xa : 0;
661 d0 = Exp_1 | y << k - Ebits | z >> Ebits + 16 - k;
662 w = xa > xa0 ? *--xa : 0;
663 y = xa > xa0 ? *--xa : 0;
664 d1 = z << k + 16 - Ebits | w << k - Ebits | y >> 16 + Ebits - k;
667 z = xa > xa0 ? *--xa : 0;
668 w = xa > xa0 ? *--xa : 0;
669 k -= Ebits + 16;
670 d0 = Exp_1 | y << k + 16 | z << k | w >> 16 - k;
671 y = xa > xa0 ? *--xa : 0;
698 ULong *x, y, z; local
716 x = b->x;
718 z = d0 & Frac_mask;
723 z |= Exp_msk11;
727 z |= Exp_msk1;
732 x[0] = y | z << (32 - k);
733 z >>= k;
740 b->wds = (x[1] = z) !=0 ? 2 : 1;
743 k = lo0bits(&z);
744 x[0] = z;
748 b->wds = 1;
755 x[0] = y | z << 32 - k & 0xffff;
756 x[1] = z >> k - 16 & 0xffff;
757 x[2] = z >> k;
762 x[1] = y >> 16 | z << 16 - k & 0xffff;
763 x[2] = z >> k & 0xffff;
764 x[3] = z >> k+16;
770 x[2] = z & 0xffff;
771 x[3] = z >> 16;
777 if (!z)
780 k = lo0bits(&z);
782 x[0] = z;
786 x[0] = z & 0xffff;
787 x[1] = z >> 16;
793 --i;
794 b->wds = i + 1;
800 *e = (de - Bias - (P-1) << 2) + k;
801 *bits = 4*P + 8 - k - hi0bits(word0(&d) & Frac_mask);
803 *e = de - Bias - (P-1) + k;
804 *bits = P - k;
809 *e = de - Bias - (P-1) + 1 + k;
811 *bits = 32*i - hi0bits(x[i-1]);
813 *bits = (i+2)*16 - hi0bits(x[i]);
825 CONST double tinytens[] = { 1e-16, 1e-32, 1e-64, 1e-128, 1e-256
830 CONST double tinytens[] = { 1e-16, 1e-32, 1e-64 };
833 CONST double tinytens[] = { 1e-16, 1e-32 };
849 strcp_D2A(a, b) char *a; char *b; in strcp_D2A() argument
851 strcp_D2A(char *a, CONST char *b)
854 while((*a = *b++))
855 a++;
856 return a;
863 memcpy_D2A(a, b, len) Char *a; Char *b; size_t len; in memcpy_D2A() argument
868 char *a = (char*)a1, *ae = a + len; local
869 char *b = (char*)b1, *a0 = a;
870 while(a < ae)
871 *a++ = *b++;