Lines Matching defs:ctx

104 static inline void _mpd_check_exp(mpd_t *dec, const mpd_context_t *ctx,
113 const mpd_context_t *ctx, uint32_t *status);
115 const mpd_context_t *ctx, uint32_t *status);
120 const mpd_context_t *ctx, uint32_t *status);
209 mpd_etiny(const mpd_context_t *ctx)
211 return ctx->emin - (ctx->prec - 1);
216 mpd_etop(const mpd_context_t *ctx)
218 return ctx->emax - (ctx->prec - 1);
351 mpd_isnormal(const mpd_t *dec, const mpd_context_t *ctx)
356 return mpd_adjexp(dec) >= ctx->emin;
361 mpd_issubnormal(const mpd_t *dec, const mpd_context_t *ctx)
366 return mpd_adjexp(dec) < ctx->emin;
589 mpd_resize(mpd_t *result, mpd_ssize_t nwords, mpd_context_t *ctx)
593 mpd_addstatus_raise(ctx, status);
600 mpd_resize_zero(mpd_t *result, mpd_ssize_t nwords, mpd_context_t *ctx)
604 mpd_addstatus_raise(ctx, status);
748 /* Initialize a workcontext from ctx. Set traps, flags and newtrap to 0. */
750 mpd_workcontext(mpd_context_t *workctx, const mpd_context_t *ctx)
752 workctx->prec = ctx->prec;
753 workctx->emax = ctx->emax;
754 workctx->emin = ctx->emin;
755 workctx->round = ctx->round;
759 workctx->clamp = ctx->clamp;
760 workctx->allcr = ctx->allcr;
787 mpd_qmaxcoeff(mpd_t *result, const mpd_context_t *ctx, uint32_t *status)
791 _mpd_idiv_word(&len, &r, ctx->prec, MPD_RDIGITS);
799 result->digits = ctx->prec;
811 * Cut off the most significant digits so that the rest fits in ctx->prec.
815 _mpd_cap(mpd_t *result, const mpd_context_t *ctx)
820 if (result->len > 0 && result->digits > ctx->prec) {
821 _mpd_idiv_word(&len, &r, ctx->prec, MPD_RDIGITS);
841 * fits in ctx->prec - ctx->clamp. Cannot fail.
844 _mpd_fix_nan(mpd_t *result, const mpd_context_t *ctx)
850 prec = ctx->prec - ctx->clamp;
1098 mpd_qsset_ssize(mpd_t *result, mpd_ssize_t a, const mpd_context_t *ctx,
1118 mpd_qfinalize(result, ctx, status);
1123 mpd_qsset_uint(mpd_t *result, mpd_uint_t a, const mpd_context_t *ctx,
1127 mpd_qfinalize(result, ctx, status);
1132 mpd_qsset_i32(mpd_t *result, int32_t a, const mpd_context_t *ctx,
1135 mpd_qsset_ssize(result, a, ctx, status);
1140 mpd_qsset_u32(mpd_t *result, uint32_t a, const mpd_context_t *ctx,
1143 mpd_qsset_uint(result, a, ctx, status);
1149 mpd_qsset_i64(mpd_t *result, int64_t a, const mpd_context_t *ctx,
1152 mpd_qsset_ssize(result, a, ctx, status);
1157 mpd_qsset_u64(mpd_t *result, uint64_t a, const mpd_context_t *ctx,
1160 mpd_qsset_uint(result, a, ctx, status);
1166 mpd_qset_ssize(mpd_t *result, mpd_ssize_t a, const mpd_context_t *ctx,
1170 mpd_qsset_ssize(result, a, ctx, status);
1175 mpd_qset_uint(mpd_t *result, mpd_uint_t a, const mpd_context_t *ctx,
1179 mpd_qfinalize(result, ctx, status);
1184 mpd_qset_i32(mpd_t *result, int32_t a, const mpd_context_t *ctx,
1187 mpd_qset_ssize(result, a, ctx, status);
1192 mpd_qset_u32(mpd_t *result, uint32_t a, const mpd_context_t *ctx,
1195 mpd_qset_uint(result, a, ctx, status);
1228 _c32_qset_u64(mpd_t *result, uint64_t a, const mpd_context_t *ctx,
1232 mpd_qfinalize(result, ctx, status);
1237 _c32_qset_i64(mpd_t *result, int64_t a, const mpd_context_t *ctx,
1256 mpd_qfinalize(result, ctx, status);
1263 mpd_qset_i64(mpd_t *result, int64_t a, const mpd_context_t *ctx,
1267 mpd_qset_ssize(result, a, ctx, status);
1269 _c32_qset_i64(result, a, ctx, status);
1295 mpd_qset_u64(mpd_t *result, uint64_t a, const mpd_context_t *ctx,
1299 mpd_qset_uint(result, a, ctx, status);
1301 _c32_qset_u64(result, a, ctx, status);
1621 mpd_qcheck_nan(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
1628 _mpd_fix_nan(result, ctx);
1641 const mpd_context_t *ctx, uint32_t *status)
1657 _mpd_fix_nan(result, ctx);
1670 const mpd_context_t *ctx, uint32_t *status)
1693 _mpd_fix_nan(result, ctx);
1701 _mpd_rnd_incr(const mpd_t *dec, mpd_uint_t rnd, const mpd_context_t *ctx)
1705 switch (ctx->round) {
1736 _mpd_apply_round(mpd_t *dec, mpd_uint_t rnd, const mpd_context_t *ctx,
1739 if (_mpd_rnd_incr(dec, rnd, ctx)) {
1740 /* We have a number with exactly ctx->prec digits. The increment
1753 _mpd_check_exp(dec, ctx, status);
1757 if (dec->digits > ctx->prec) {
1760 dec->digits = ctx->prec;
1761 _mpd_check_exp(dec, ctx, status);
1770 _mpd_apply_round_excess(mpd_t *dec, mpd_uint_t rnd, const mpd_context_t *ctx,
1773 if (_mpd_rnd_incr(dec, rnd, ctx)) {
1792 _mpd_apply_round_fit(mpd_t *dec, mpd_uint_t rnd, const mpd_context_t *ctx,
1795 if (_mpd_rnd_incr(dec, rnd, ctx)) {
1805 if (dec->digits > ctx->prec) {
1817 _mpd_check_exp(mpd_t *dec, const mpd_context_t *ctx, uint32_t *status)
1823 if (adjexp > ctx->emax) {
1826 dec->exp = ctx->emax;
1827 if (ctx->clamp) {
1828 dec->exp -= (ctx->prec-1);
1835 switch (ctx->round) {
1842 mpd_qmaxcoeff(dec, ctx, status);
1843 dec->exp = ctx->emax - ctx->prec + 1;
1847 mpd_qmaxcoeff(dec, ctx, status);
1848 dec->exp = ctx->emax - ctx->prec + 1;
1856 mpd_qmaxcoeff(dec, ctx, status);
1857 dec->exp = ctx->emax - ctx->prec + 1;
1870 else if (ctx->clamp && dec->exp > mpd_etop(ctx)) {
1874 shift = dec->exp - mpd_etop(ctx);
1880 if (!mpd_iszerocoeff(dec) && adjexp < ctx->emin) {
1886 else if (adjexp < ctx->emin) {
1888 etiny = mpd_etiny(ctx);
1908 _mpd_apply_round_excess(dec, rnd, ctx, status);
1930 mpd_check_underflow(mpd_t *dec, const mpd_context_t *ctx, uint32_t *status)
1932 if (mpd_adjexp(dec) < ctx->emin && !mpd_iszero(dec) &&
1933 dec->exp < mpd_etiny(ctx)) {
1940 _mpd_check_round(mpd_t *dec, const mpd_context_t *ctx, uint32_t *status)
1950 if (dec->digits > ctx->prec) {
1951 shift = dec->digits - ctx->prec;
1954 _mpd_apply_round(dec, rnd, ctx, status);
1964 mpd_qfinalize(mpd_t *result, const mpd_context_t *ctx, uint32_t *status)
1968 _mpd_fix_nan(result, ctx);
1973 _mpd_check_exp(result, ctx, status);
1974 _mpd_check_round(result, ctx, status);
2344 const mpd_context_t *ctx, uint32_t *status)
2349 if (mpd_qcheck_nans(result, a, b, ctx, status)) {
2362 const mpd_context_t *ctx, uint32_t *status)
2367 if (mpd_qcheck_nans(result, a, b, ctx, status)) {
2679 const mpd_context_t *ctx, uint32_t *status)
2760 _mpd_cap(result, ctx);
2769 mpd_class(const mpd_t *a, const mpd_context_t *ctx)
2782 else if (mpd_isnormal(a, ctx))
2792 else if (mpd_isnormal(a, ctx))
2801 mpd_qinvert(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
2814 digits = (a->digits < ctx->prec) ? ctx->prec : a->digits;
2840 _mpd_cap(result, ctx);
2849 mpd_qlogb(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
2853 if (mpd_qcheck_nan(result, a, ctx, status)) {
2863 mpd_qset_ssize(result, mpd_adjexp(a), ctx, status);
2870 const mpd_context_t *ctx, uint32_t *status)
2953 _mpd_cap(result, ctx);
2966 const mpd_context_t *ctx, uint32_t *status)
2975 if (mpd_qcheck_nans(result, a, b, ctx, status)) {
2989 if (n > ctx->prec || n < -ctx->prec) {
3000 rshift = ctx->prec-n;
3003 lshift = ctx->prec+n;
3007 if (a->digits > ctx->prec) {
3012 _mpd_cap(&tmp, ctx);
3020 _mpd_cap(&big, ctx);
3026 _mpd_qadd(result, &big, &small, ctx, status);
3042 const mpd_context_t *ctx, uint32_t *status)
3055 if (mpd_qcheck_nans(result, a, b, ctx, status)) {
3066 maxjump = 2 * (mpd_uint_t)(ctx->emax + ctx->prec);
3102 mpd_qfinalize(result, ctx, status);
3111 mpd_qshiftn(mpd_t *result, const mpd_t *a, mpd_ssize_t n, const mpd_context_t *ctx,
3115 if (mpd_qcheck_nan(result, a, ctx, status)) {
3122 if (n >= 0 && n <= ctx->prec) {
3124 _mpd_cap(result, ctx);
3126 else if (n < 0 && n >= -ctx->prec) {
3130 _mpd_cap(result, ctx);
3143 mpd_qshift(mpd_t *result, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx,
3150 if (mpd_qcheck_nans(result, a, b, ctx, status)) {
3164 if (n > ctx->prec || n < -ctx->prec) {
3175 _mpd_cap(result, ctx);
3181 _mpd_cap(result, ctx);
3189 const mpd_context_t *ctx, uint32_t *status)
3272 _mpd_cap(result, ctx);
3290 mpd_qabs(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
3294 if (mpd_qcheck_nan(result, a, ctx, status)) {
3300 mpd_qminus(result, a, ctx, status);
3303 mpd_qplus(result, a, ctx, status);
3336 const mpd_context_t *ctx, uint32_t *status)
3357 exp += (big->digits > ctx->prec) ? 0 : big->digits-ctx->prec-1;
3462 if (ctx->round == MPD_ROUND_FLOOR) {
3477 const mpd_context_t *ctx, uint32_t *status)
3479 _mpd_qaddsub(result, a, b, mpd_sign(b), ctx, status);
3485 const mpd_context_t *ctx, uint32_t *status)
3487 _mpd_qaddsub(result, a, b, !mpd_sign(b), ctx, status);
3493 const mpd_context_t *ctx, uint32_t *status)
3496 if (mpd_qcheck_nans(result, a, b, ctx, status)) {
3503 _mpd_qaddsub(result, a, b, mpd_sign(b), ctx, status);
3504 mpd_qfinalize(result, ctx, status);
3510 const mpd_context_t *ctx, uint32_t *status)
3514 mpd_qadd(result, a, b, ctx, &workstatus);
3524 const mpd_context_t *ctx, uint32_t *status)
3527 if (mpd_qcheck_nans(result, a, b, ctx, status)) {
3534 _mpd_qaddsub(result, a, b, !mpd_sign(b), ctx, status);
3535 mpd_qfinalize(result, ctx, status);
3541 const mpd_context_t *ctx, uint32_t *status)
3545 mpd_qsub(result, a, b, ctx, &workstatus);
3555 const mpd_context_t *ctx, uint32_t *status)
3562 mpd_qadd(result, a, &bb, ctx, status);
3569 const mpd_context_t *ctx, uint32_t *status)
3576 mpd_qadd(result, a, &bb, ctx, status);
3583 const mpd_context_t *ctx, uint32_t *status)
3590 mpd_qsub(result, a, &bb, ctx, status);
3597 const mpd_context_t *ctx, uint32_t *status)
3604 mpd_qsub(result, a, &bb, ctx, status);
3611 const mpd_context_t *ctx, uint32_t *status)
3613 mpd_qadd_ssize(result, a, b, ctx, status);
3619 const mpd_context_t *ctx, uint32_t *status)
3621 mpd_qadd_uint(result, a, b, ctx, status);
3628 const mpd_context_t *ctx, uint32_t *status)
3630 mpd_qadd_ssize(result, a, b, ctx, status);
3636 const mpd_context_t *ctx, uint32_t *status)
3638 mpd_qadd_uint(result, a, b, ctx, status);
3644 const mpd_context_t *ctx, uint32_t *status)
3651 mpd_qadd(result, a, &bb, ctx, status);
3658 const mpd_context_t *ctx, uint32_t *status)
3665 mpd_qadd(result, a, &bb, ctx, status);
3673 const mpd_context_t *ctx, uint32_t *status)
3675 mpd_qsub_ssize(result, a, b, ctx, status);
3681 const mpd_context_t *ctx, uint32_t *status)
3683 mpd_qsub_uint(result, a, b, ctx, status);
3690 const mpd_context_t *ctx, uint32_t *status)
3692 mpd_qsub_ssize(result, a, b, ctx, status);
3698 const mpd_context_t *ctx, uint32_t *status)
3700 mpd_qsub_uint(result, a, b, ctx, status);
3706 const mpd_context_t *ctx, uint32_t *status)
3713 mpd_qsub(result, a, &bb, ctx, status);
3720 const mpd_context_t *ctx, uint32_t *status)
3727 mpd_qsub(result, a, &bb, ctx, status);
3736 const mpd_context_t *ctx, uint32_t *status)
3747 _settriple(result, mpd_sign(a)^mpd_sign(b), 0, mpd_etiny(ctx));
3755 const mpd_context_t *ctx, uint32_t *status)
3768 if (mpd_qcheck_nans(q, a, b, ctx, status)) {
3771 _mpd_qdiv_inf(q, a, b, ctx, status);
3787 mpd_qfinalize(q, ctx, status);
3791 shift = (b->digits - a->digits) + ctx->prec + 1;
3871 mpd_qfinalize(q, ctx, status);
3877 const mpd_context_t *ctx, uint32_t *status)
3899 _mpd_qdiv(SET_IDEAL_EXP, q, a, b, ctx, &xstatus);
3922 mpd_context_t workctx = *ctx;
3926 if (workctx.prec >= ctx->prec) {
3950 const mpd_context_t *ctx, uint32_t *status)
3987 if (expdiff > ctx->prec) {
4067 if (q->digits > ctx->prec) {
4093 const mpd_context_t *ctx, uint32_t *status)
4098 if (mpd_qcheck_nans(q, a, b, ctx, status)) {
4118 mpd_qfinalize(r, ctx, status);
4139 _mpd_qdivmod(q, r, a, b, ctx, status);
4140 mpd_qfinalize(q, ctx, status);
4141 mpd_qfinalize(r, ctx, status);
4146 const mpd_context_t *ctx, uint32_t *status)
4152 if (mpd_qcheck_nans(q, a, b, ctx, status)) {
4182 _mpd_qdivmod(q, &r, a, b, ctx, status);
4184 mpd_qfinalize(q, ctx, status);
4190 const mpd_context_t *ctx, uint32_t *status)
4197 mpd_qdiv(result, a, &bb, ctx, status);
4204 const mpd_context_t *ctx, uint32_t *status)
4211 mpd_qdiv(result, a, &bb, ctx, status);
4218 const mpd_context_t *ctx, uint32_t *status)
4220 mpd_qdiv_ssize(result, a, b, ctx, status);
4226 const mpd_context_t *ctx, uint32_t *status)
4228 mpd_qdiv_uint(result, a, b, ctx, status);
4235 const mpd_context_t *ctx, uint32_t *status)
4237 mpd_qdiv_ssize(result, a, b, ctx, status);
4243 const mpd_context_t *ctx, uint32_t *status)
4245 mpd_qdiv_uint(result, a, b, ctx, status);
4251 const mpd_context_t *ctx, uint32_t *status)
4258 mpd_qdiv(result, a, &bb, ctx, status);
4265 const mpd_context_t *ctx, uint32_t *status)
4272 mpd_qdiv(result, a, &bb, ctx, status);
4279 _mpd_zeropad(mpd_t *result, const mpd_context_t *ctx, uint32_t *status)
4282 result->digits < ctx->prec) {
4283 mpd_ssize_t shift = ctx->prec - result->digits;
4291 _mpd_qexp_check_one(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
4294 MPD_NEW_CONST(lim,0,-(ctx->prec+1),1,1,1,9);
4382 _mpd_qexp(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
4424 _settriple(result, MPD_POS, 0, mpd_etiny(ctx));
4432 if (_mpd_qexp_check_one(result, a, ctx, status)) {
4437 workctx.prec = ctx->prec + t + 2;
4490 mpd_qexp(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
4496 if (mpd_qcheck_nan(result, a, ctx, status)) {
4512 workctx = *ctx;
4515 if (ctx->allcr) {
4533 prec = ctx->prec + 3;
4561 workctx.prec = ctx->prec;
4566 workctx.clamp = ctx->clamp;
4590 const mpd_context_t *ctx, uint32_t *status)
4603 _mpd_qmul(result, a, b, ctx, &workstatus);
4605 mpd_qadd(result, result, c, ctx, &workstatus);
4842 _mpd_qln(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
4904 maxprec = ctx->prec + 2;
4929 if (mpd_adjexp(&tmp) < mpd_etiny(ctx)) {
4931 _settriple(result, (cmp<0), 1, mpd_etiny(ctx)-1);
4938 * p = ctx->prec+2-adjexp(lower), then the relative error of
4942 * <= 10**(-ctx->prec-2)
4976 * less than 10**(-ctx.prec-1).
4980 * p := maxprec = ctx->prec + 2
4994 * < 0.5 * 10**(-p + 1) = 0.5 * 10**(-ctx->prec-1)
5010 mpd_qln(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
5017 if (mpd_qcheck_nan(result, a, ctx, status)) {
5063 if (mpd_exp_digits(t)-1 > ctx->emax) {
5069 workctx = *ctx;
5072 if (ctx->allcr) {
5088 prec = ctx->prec + 3;
5095 workctx.prec = ctx->prec;
5100 workctx.clamp = ctx->clamp;
5129 const mpd_context_t *ctx, uint32_t *status)
5135 workctx.prec = ctx->prec + 3;
5143 workctx = *ctx;
5154 mpd_qlog10(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
5160 workctx = *ctx;
5164 if (mpd_qcheck_nan(result, a, ctx, status)) {
5215 if (mpd_exp_digits(t)-1 > ctx->emax) {
5221 if (ctx->allcr) {
5237 prec = ctx->prec + 3;
5244 workctx.prec = ctx->prec;
5249 workctx.clamp = ctx->clamp;
5274 const mpd_context_t *ctx, uint32_t *status)
5284 else if (mpd_qcheck_nans(result, a, b, ctx, status)) {
5301 mpd_qfinalize(result, ctx, status);
5310 const mpd_context_t *ctx, uint32_t *status)
5320 else if (mpd_qcheck_nans(result, a, b, ctx, status)) {
5337 mpd_qfinalize(result, ctx, status);
5347 const mpd_context_t *ctx, uint32_t *status)
5357 else if (mpd_qcheck_nans(result, a, b, ctx, status)) {
5374 mpd_qfinalize(result, ctx, status);
5383 const mpd_context_t *ctx, uint32_t *status)
5393 else if (mpd_qcheck_nans(result, a, b, ctx, status)) {
5410 mpd_qfinalize(result, ctx, status);
5898 const mpd_context_t *ctx, uint32_t *status)
5907 if (mpd_qcheck_nans(result, a, b, ctx, status)) {
5993 const mpd_context_t *ctx, uint32_t *status)
5995 _mpd_qmul(result, a, b, ctx, status);
5996 mpd_qfinalize(result, ctx, status);
6002 const mpd_context_t *ctx, uint32_t *status)
6006 mpd_qmul(result, a, b, ctx, &workstatus);
6016 const mpd_context_t *ctx, uint32_t *status)
6023 mpd_qmul(result, a, &bb, ctx, status);
6030 const mpd_context_t *ctx, uint32_t *status)
6037 mpd_qmul(result, a, &bb, ctx, status);
6043 const mpd_context_t *ctx, uint32_t *status)
6045 mpd_qmul_ssize(result, a, b, ctx, status);
6050 const mpd_context_t *ctx, uint32_t *status)
6052 mpd_qmul_uint(result, a, b, ctx, status);
6058 const mpd_context_t *ctx, uint32_t *status)
6060 mpd_qmul_ssize(result, a, b, ctx, status);
6065 const mpd_context_t *ctx, uint32_t *status)
6067 mpd_qmul_uint(result, a, b, ctx, status);
6073 const mpd_context_t *ctx, uint32_t *status)
6080 mpd_qmul(result, a, &bb, ctx, status);
6087 const mpd_context_t *ctx, uint32_t *status)
6094 mpd_qmul(result, a, &bb, ctx, status);
6101 mpd_qminus(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
6105 if (mpd_qcheck_nan(result, a, ctx, status)) {
6110 if (mpd_iszero(a) && ctx->round != MPD_ROUND_FLOOR) {
6117 mpd_qfinalize(result, ctx, status);
6122 mpd_qplus(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
6126 if (mpd_qcheck_nan(result, a, ctx, status)) {
6131 if (mpd_iszero(a) && ctx->round != MPD_ROUND_FLOOR) {
6138 mpd_qfinalize(result, ctx, status);
6143 mpd_qnext_minus(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
6147 MPD_NEW_CONST(tiny,MPD_POS,mpd_etiny(ctx)-1,1,1,1,1);
6150 if (mpd_qcheck_nan(result, a, ctx, status)) {
6161 mpd_qmaxcoeff(result, ctx, status);
6165 result->exp = mpd_etop(ctx);
6170 mpd_workcontext(&workctx, ctx);
6190 mpd_qnext_plus(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
6194 MPD_NEW_CONST(tiny,MPD_POS,mpd_etiny(ctx)-1,1,1,1,1);
6197 if (mpd_qcheck_nan(result, a, ctx, status)) {
6207 mpd_qmaxcoeff(result, ctx, status);
6212 result->exp = mpd_etop(ctx);
6217 mpd_workcontext(&workctx, ctx);
6241 const mpd_context_t *ctx, uint32_t *status)
6245 if (mpd_qcheck_nans(result, a, b, ctx, status)) {
6256 mpd_qnext_plus(result, a, ctx, status);
6259 mpd_qnext_minus(result, a, ctx, status);
6265 else if (mpd_adjexp(result) < ctx->emin) {
6285 uint8_t resultsign, const mpd_context_t *ctx, uint32_t *status)
6301 mpd_qmul(result, result, result, ctx, &workstatus);
6303 mpd_qmul(result, result, base, ctx, &workstatus);
6327 const mpd_context_t *ctx, uint32_t *status)
6341 mpd_qmul(result, result, tbase, ctx, &workstatus);
6348 mpd_qmul(tbase, tbase, tbase, ctx, &workstatus);
6366 const mpd_context_t *ctx, uint32_t *status)
6374 mpd_workcontext(&workctx, ctx);
6415 mpd_qfinalize(result, ctx, status);
6425 const mpd_context_t *ctx, uint32_t *status)
6431 shift = ctx->prec-1;
6451 const mpd_context_t *ctx, uint32_t *status)
6464 mpd_qmul_ssize(result, exp, -base->exp, ctx, &workstatus);
6472 if (shift > ctx->prec-1) {
6473 shift = ctx->prec-1;
6478 shift = ctx->prec-1;
6599 const mpd_context_t *ctx, uint32_t *status)
6617 ub_omega = mpd_exp_digits(ctx->emax);
6620 mpd_qfinalize(result, ctx, status);
6626 ub_omega = mpd_exp_digits(mpd_etiny(ctx));
6628 _settriple(result, resultsign, 1, mpd_etiny(ctx)-1);
6629 mpd_qfinalize(result, ctx, status);
6645 const mpd_context_t *ctx, uint32_t *status)
6657 const mpd_context_t *ctx, uint32_t *status)
6668 workctx.prec = (base->digits > ctx->prec) ? base->digits : ctx->prec;
6671 workctx.allcr = ctx->allcr;
6709 const mpd_context_t *ctx, uint32_t *status)
6716 if (mpd_qcheck_nans(result, base, exp, ctx, status)) {
6745 cmp = _qcheck_pow_one_inf(result, base, resultsign, ctx, status);
6776 if (_qcheck_pow_one(result, base, exp, resultsign, ctx, status) == 0) {
6779 if (_qcheck_pow_bounds(result, base, exp, resultsign, ctx, status)) {
6784 _mpd_qpow_int(result, base, exp, resultsign, ctx, status);
6787 _mpd_qpow_real(result, base, exp, ctx, status);
6789 mpd_ssize_t shift = ctx->prec-1;
6797 mpd_qfinalize(result, ctx, status);
6831 const mpd_context_t *ctx, uint32_t *status)
6847 if (mpd_qcheck_3nans(result, base, exp, mod, ctx, status)) {
6863 if (mod->digits+mod->exp > ctx->prec) {
6962 const mpd_context_t *ctx, uint32_t *status)
6970 if (mpd_qcheck_nans(result, a, b, ctx, status)) {
6981 if (b->exp > ctx->emax || b->exp < mpd_etiny(ctx)) {
6988 mpd_qfinalize(result, ctx, status);
6994 if (a->digits + expdiff > ctx->prec) {
7015 if (!_mpd_apply_round_fit(result, rnd, ctx, status)) {
7024 if (mpd_adjexp(result) > ctx->emax ||
7025 mpd_adjexp(result) < mpd_etiny(ctx)) {
7031 mpd_qfinalize(result, ctx, status);
7035 mpd_qreduce(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
7042 if (mpd_qcheck_nan(result, a, ctx, status)) {
7052 mpd_qfinalize(result, ctx, status);
7062 maxexp = (ctx->clamp) ? mpd_etop(ctx) : ctx->emax;
7072 mpd_qrem(mpd_t *r, const mpd_t *a, const mpd_t *b, const mpd_context_t *ctx,
7078 if (mpd_qcheck_nans(r, a, b, ctx, status)) {
7087 mpd_qfinalize(r, ctx, status);
7103 _mpd_qdivmod(&q, r, a, b, ctx, status);
7105 mpd_qfinalize(r, ctx, status);
7110 const mpd_context_t *ctx, uint32_t *status)
7121 if (mpd_qcheck_nans(r, a, b, ctx, status)) {
7130 mpd_qfinalize(r, ctx, status);
7154 _mpd_qdivmod(&q, r, a, b, ctx, status);
7187 if (allnine && qdigits == ctx->prec) {
7200 mpd_qfinalize(r, ctx, status);
7205 const mpd_context_t *ctx, uint32_t *status)
7239 _mpd_apply_round_excess(result, rnd, ctx, status);
7246 if (mpd_issubnormal(result, ctx)) {
7261 const mpd_context_t *ctx, uint32_t *status)
7268 _mpd_qrescale(result, a, exp, ctx, status);
7281 const mpd_context_t *ctx, uint32_t *status)
7288 _mpd_qrescale(result, a, exp, ctx, status);
7291 /* Round to an integer according to 'action' and ctx->round. */
7295 const mpd_context_t *ctx, uint32_t *status)
7300 if (mpd_qcheck_nan(result, a, ctx, status)) {
7322 _mpd_apply_round_excess(result, rnd, ctx, status);
7333 mpd_qround_to_intx(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
7336 (void)_mpd_qround_to_integral(TO_INT_EXACT, result, a, ctx, status);
7340 mpd_qround_to_int(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
7343 (void)_mpd_qround_to_integral(TO_INT_SILENT, result, a, ctx, status);
7347 mpd_qtrunc(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
7355 (void)_mpd_qround_to_integral(TO_INT_TRUNC, result, a, ctx, status);
7359 mpd_qfloor(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
7362 mpd_context_t workctx = *ctx;
7375 mpd_qceil(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
7378 mpd_context_t workctx = *ctx;
7458 _mpd_qreciprocal(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
7490 maxprec = ctx->prec;
7526 mpd_qfinalize(z, ctx, status);
7752 _mpd_qinvroot(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
7811 maxprec = ctx->prec + 1;
7851 mpd_qinvroot(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
7857 if (mpd_qcheck_nan(result, a, ctx, status)) {
7865 _settriple(result, MPD_POS, 0, mpd_etiny(ctx));
7879 workctx = *ctx;
7883 mpd_qfinalize(result, ctx, status);
7889 _mpd_qsqrt(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
7905 if (mpd_qcheck_nan(result, a, ctx, status)) {
7917 mpd_qfinalize(result, ctx, status);
7926 prec = ctx->prec + 1;
8012 maxcontext = *ctx;
8023 mpd_qsqrt(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
8037 _mpd_qsqrt(result, a, ctx, &xstatus);
8050 mpd_context_t workctx = *ctx;
8053 if (workctx.prec >= ctx->prec) {
8541 const mpd_context_t *ctx, uint32_t *status)
8580 mpd_qfinalize(result, ctx, status);
8595 const mpd_context_t *ctx, uint32_t *status)
8656 mpd_qfinalize(result, ctx, status);