bc: simplify representation of 0.5 in sqrt()
function old new delta zxc_program_exec 4012 4149 +137 zdc_program_printStream 144 - -144 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 1/0 up/down: 137/-144) Total: -7 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
		| @@ -2157,6 +2157,7 @@ static BC_STATUS zbc_num_sqrt(BcNum *a, BcNum *restrict b, size_t scale) | ||||
| { | ||||
| 	BcStatus s; | ||||
| 	BcNum num1, num2, half, f, fprime, *x0, *x1, *temp; | ||||
| 	BcDig half_digs[1]; | ||||
| 	size_t pow, len, digs, digs1, resrdx, req, times = 0; | ||||
| 	ssize_t cmp = 1, cmp1 = SSIZE_MAX, cmp2 = SSIZE_MAX; | ||||
|  | ||||
| @@ -2181,10 +2182,11 @@ static BC_STATUS zbc_num_sqrt(BcNum *a, BcNum *restrict b, size_t scale) | ||||
|  | ||||
| 	bc_num_init(&num1, len); | ||||
| 	bc_num_init(&num2, len); | ||||
| 	bc_num_init_DEF_SIZE(&half); | ||||
|  | ||||
| 	half.cap = ARRAY_SIZE(half_digs); | ||||
| 	half.num = half_digs; | ||||
| 	bc_num_one(&half); | ||||
| 	half.num[0] = 5; | ||||
| 	half_digs[0] = 5; | ||||
| 	half.rdx = 1; | ||||
|  | ||||
| 	bc_num_init(&f, len); | ||||
| @@ -2247,7 +2249,6 @@ static BC_STATUS zbc_num_sqrt(BcNum *a, BcNum *restrict b, size_t scale) | ||||
|  err: | ||||
| 	bc_num_free(&fprime); | ||||
| 	bc_num_free(&f); | ||||
| 	bc_num_free(&half); | ||||
| 	bc_num_free(&num2); | ||||
| 	bc_num_free(&num1); | ||||
| 	RETURN_STATUS(s); | ||||
| @@ -2285,7 +2286,7 @@ static BC_STATUS zdc_num_modexp(BcNum *a, BcNum *b, BcNum *c, BcNum *restrict d) | ||||
| { | ||||
| 	BcStatus s; | ||||
| 	BcNum base, exp, two, temp; | ||||
| 	BcDig two_digs[2]; | ||||
| 	BcDig two_digs[1]; | ||||
|  | ||||
| 	if (c->len == 0) | ||||
| 		RETURN_STATUS(bc_error("divide by zero")); | ||||
| @@ -5125,15 +5126,19 @@ static BC_STATUS zxc_program_num(BcResult *r, BcNum **num) | ||||
| 	case XC_RESULT_ARRAY: | ||||
| 	case XC_RESULT_ARRAY_ELEM: { | ||||
| 		BcVec *v; | ||||
|  | ||||
| 		void *p; | ||||
| 		v = xc_program_search(r->d.id.name, r->t == XC_RESULT_VAR); | ||||
|  | ||||
| // dc variables are all stacks, so here we have this: | ||||
| 		p = bc_vec_top(v); | ||||
| // TODO: eliminate these stacks for bc-only config? | ||||
| 		if (r->t == XC_RESULT_ARRAY_ELEM) { | ||||
| 			v = bc_vec_top(v); | ||||
| 			if (v->len <= r->d.id.idx) bc_array_expand(v, r->d.id.idx + 1); | ||||
| 			v = p; | ||||
| 			if (v->len <= r->d.id.idx) | ||||
| 				bc_array_expand(v, r->d.id.idx + 1); | ||||
| 			*num = bc_vec_item(v, r->d.id.idx); | ||||
| 		} else | ||||
| 			*num = bc_vec_top(v); | ||||
| 		} else { | ||||
| 			*num = p; | ||||
| 		} | ||||
| 		break; | ||||
| 	} | ||||
| #if ENABLE_BC | ||||
|   | ||||
		Reference in New Issue
	
	Block a user