Lines Matching defs:scale
176 BcStatus bc_num_add(BcNum *a, BcNum *b, BcNum *c, size_t scale);
177 BcStatus bc_num_sub(BcNum *a, BcNum *b, BcNum *c, size_t scale);
178 BcStatus bc_num_mul(BcNum *a, BcNum *b, BcNum *c, size_t scale);
179 BcStatus bc_num_div(BcNum *a, BcNum *b, BcNum *c, size_t scale);
180 BcStatus bc_num_mod(BcNum *a, BcNum *b, BcNum *c, size_t scale);
181 BcStatus bc_num_pow(BcNum *a, BcNum *b, BcNum *c, size_t scale);
182 BcStatus bc_num_sqrt(BcNum *a, BcNum *b, size_t scale);
183 BcStatus bc_num_divmod(BcNum *a, BcNum *b, BcNum *c, BcNum *d, size_t scale);
185 size_t bc_num_addReq(BcNum *a, BcNum *b, size_t scale);
187 size_t bc_num_mulReq(BcNum *a, BcNum *b, size_t scale);
188 size_t bc_num_powReq(BcNum *a, BcNum *b, size_t scale);
545 size_t scale;
672 "bad assignment: left side must be scale, ibase, "
688 "bad scale; must be [%lu, %lu]",
729 BC_LEX_KW_ENTRY("scale", 5, 1),
1134 static void bc_num_setToZero(BcNum *n, size_t scale) {
1137 n->rdx = scale;
1259 static void bc_num_retireMul(BcNum *n, size_t scale, int neg1, int neg2) {
1261 if (n->rdx < scale) bc_num_extend(n, scale - n->rdx);
1262 else bc_num_truncate(n, n->rdx - scale);
1303 static BcStatus bc_num_inv(BcNum *a, BcNum *b, size_t scale) {
1312 return bc_num_div(&one, a, b, scale);
1328 // Because this function doesn't need to use scale (per the bc spec),
1399 // Because this function doesn't need to use scale (per the bc spec),
1559 static BcStatus bc_num_m(BcNum *a, BcNum *b, BcNum *c, size_t scale) {
1565 scale = maxof(scale, a->rdx);
1566 scale = maxof(scale, b->rdx);
1567 scale = minof(a->rdx + b->rdx, scale);
1568 maxrdx = maxof(maxrdx, scale);
1582 maxrdx += scale;
1591 bc_num_retireMul(c, scale, a->neg, b->neg);
1599 static BcStatus bc_num_d(BcNum *a, BcNum *b, BcNum *c, size_t scale) {
1609 bc_num_setToZero(c, scale);
1614 bc_num_retireMul(c, scale, a->neg, b->neg);
1618 bc_num_init(&cp, bc_num_mulReq(a, b, scale));
1629 if (scale > cp.rdx) bc_num_extend(&cp, scale - cp.rdx);
1656 if (!s) bc_num_retireMul(c, scale, a->neg, b->neg);
1662 static BcStatus bc_num_r(BcNum *a, BcNum *b, BcNum *c, BcNum *d, size_t scale,
1677 bc_num_d(a, b, c, scale);
1679 if (scale) scale = ts;
1681 s = bc_num_m(c, b, &temp, scale);
1683 s = bc_num_sub(a, &temp, d, scale);
1697 static BcStatus bc_num_rem(BcNum *a, BcNum *b, BcNum *c, size_t scale) {
1701 size_t ts = maxof(scale + b->rdx, a->rdx), len = bc_num_mulReq(a, b, ts);
1704 s = bc_num_r(a, b, &c1, c, scale, ts);
1710 static BcStatus bc_num_p(BcNum *a, BcNum *b, BcNum *c, size_t scale) {
1726 bc_num_setToZero(c, scale);
1731 else s = bc_num_inv(a, c, scale);
1743 if (!neg) scale = minof(a->rdx * pow, maxof(scale, a->rdx));
1773 s = bc_num_inv(c, c, scale);
1782 if (c->rdx > scale) bc_num_truncate(c, c->rdx - scale);
1786 if (zero) bc_num_setToZero(c, scale);
1793 static BcStatus bc_num_binary(BcNum *a, BcNum *b, BcNum *c, size_t scale,
1819 s = op(ptr_a, ptr_b, c, scale);
2163 size_t bc_num_addReq(BcNum *a, BcNum *b, size_t scale) {
2167 size_t bc_num_mulReq(BcNum *a, BcNum *b, size_t scale) {
2168 return BC_NUM_INT(a) + BC_NUM_INT(b) + maxof(scale, a->rdx + b->rdx) + 1;
2171 size_t bc_num_powReq(BcNum *a, BcNum *b, size_t scale) {
2175 BcStatus bc_num_add(BcNum *a, BcNum *b, BcNum *c, size_t scale) {
2177 return bc_num_binary(a, b, c, 0, op, bc_num_addReq(a, b, scale));
2180 BcStatus bc_num_sub(BcNum *a, BcNum *b, BcNum *c, size_t scale) {
2182 return bc_num_binary(a, b, c, 1, op, bc_num_addReq(a, b, scale));
2185 BcStatus bc_num_mul(BcNum *a, BcNum *b, BcNum *c, size_t scale) {
2186 return bc_num_binary(a, b, c, scale, bc_num_m, bc_num_mulReq(a, b, scale));
2189 BcStatus bc_num_div(BcNum *a, BcNum *b, BcNum *c, size_t scale) {
2190 return bc_num_binary(a, b, c, scale, bc_num_d, bc_num_mulReq(a, b, scale));
2193 BcStatus bc_num_mod(BcNum *a, BcNum *b, BcNum *c, size_t scale) {
2194 return bc_num_binary(a, b, c, scale, bc_num_rem, bc_num_mulReq(a, b, scale));
2197 BcStatus bc_num_pow(BcNum *a, BcNum *b, BcNum *c, size_t scale) {
2198 return bc_num_binary(a, b, c, scale, bc_num_p, a->len + b->len + 1);
2201 BcStatus bc_num_sqrt(BcNum *a, BcNum *b, size_t scale) {
2209 bc_num_init(b, maxof(scale, a->rdx) + ((BC_NUM_INT(a) + 1) >> 1) + 1);
2212 bc_num_setToZero(b, scale);
2218 bc_num_extend(b, scale);
2222 scale = maxof(scale, a->rdx) + 1;
2223 len = a->len + scale;
2256 resrdx = scale + 2;
2291 scale -= 1;
2292 if (b->rdx > scale) bc_num_truncate(b, b->rdx - scale);
2302 BcStatus bc_num_divmod(BcNum *a, BcNum *b, BcNum *c, BcNum *d, size_t scale) {
2307 size_t ts = maxof(scale + b->rdx, a->rdx), len = bc_num_mulReq(a, b, ts);
2320 s = bc_num_r(ptr_a, b, c, d, scale, ts);
4721 bc_num_init(&res.d.n, bc_program_opReqs[idx](n1, n2, p->scale));
4723 s = bc_program_ops[idx](n1, n2, &res.d.n, p->scale);
5019 s = bc_program_ops[inst - BC_INST_ASSIGN_POWER](l, r, l, p->scale);
5036 ptr = &p->scale;
5267 if (inst == BC_INST_SQRT) s = bc_num_sqrt(num, resn, p->scale);
5298 else if (inst == BC_INST_SCALE) val = (unsigned long) p->scale;