free up some flash space
This commit is contained in:
		
							
								
								
									
										11
									
								
								src/calc.c
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								src/calc.c
									
									
									
									
									
								
							@ -253,16 +253,7 @@ void process_cmd(char cmd){
 | 
				
			|||||||
		} break;
 | 
							} break;
 | 
				
			||||||
		//////////
 | 
							//////////
 | 
				
			||||||
		case '7':{ //y^x
 | 
							case '7':{ //y^x
 | 
				
			||||||
			if (decn_is_nan(&stack(STACK_Y)) || decn_is_nan(&stack(STACK_X))){
 | 
								do_binary_op(pow_decn);
 | 
				
			||||||
				set_dec80_NaN(&stack(STACK_Y));
 | 
					 | 
				
			||||||
			} else {
 | 
					 | 
				
			||||||
				copy_decn(&LastX, &stack(STACK_X)); //save LastX
 | 
					 | 
				
			||||||
				copy_decn(&AccDecn, &stack(STACK_Y));
 | 
					 | 
				
			||||||
				copy_decn(&BDecn, &stack(STACK_X));
 | 
					 | 
				
			||||||
				pow_decn();
 | 
					 | 
				
			||||||
				copy_decn(&stack(STACK_Y), &AccDecn);
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			pop();
 | 
					 | 
				
			||||||
		} break;
 | 
							} break;
 | 
				
			||||||
		//////////
 | 
							//////////
 | 
				
			||||||
	} //switch(cmd)
 | 
						} //switch(cmd)
 | 
				
			||||||
 | 
				
			|||||||
@ -80,11 +80,6 @@ __idata uint8_t TmpStackPtr;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
__xdata char Buf[DECN_BUF_SIZE];
 | 
					__xdata char Buf[DECN_BUF_SIZE];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//1 constant
 | 
					 | 
				
			||||||
const dec80 DECN_1 = {
 | 
					 | 
				
			||||||
	0, {10, 0}
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//ln(10) constant
 | 
					//ln(10) constant
 | 
				
			||||||
const dec80 DECN_LN_10 = {
 | 
					const dec80 DECN_LN_10 = {
 | 
				
			||||||
	0, {23,  2, 58, 50, 92, 99, 40, 45, 68}
 | 
						0, {23,  2, 58, 50, 92, 99, 40, 45, 68}
 | 
				
			||||||
@ -427,6 +422,11 @@ void set_dec80_zero(dec80* dest){
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void set_decn_one(dec80* dest){
 | 
				
			||||||
 | 
						set_dec80_zero(dest);
 | 
				
			||||||
 | 
						dest->lsu[0] = 10;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint8_t decn_is_zero(const dec80* x){
 | 
					uint8_t decn_is_zero(const dec80* x){
 | 
				
			||||||
	uint8_t i;
 | 
						uint8_t i;
 | 
				
			||||||
	for (i = 0; i < DEC80_NUM_LSU; i++){
 | 
						for (i = 0; i < DEC80_NUM_LSU; i++){
 | 
				
			||||||
@ -874,9 +874,7 @@ void recip_decn(void){
 | 
				
			|||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		      CURR_RECIP.lsu[0] = 10; //0.1 with implicit point and exponent
 | 
							      CURR_RECIP.lsu[0] = 10; //0.1 with implicit point and exponent
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	for (i = 1; i < DEC80_NUM_LSU; i++){
 | 
						zero_remaining_dec80(&CURR_RECIP, 1);
 | 
				
			||||||
		      CURR_RECIP.lsu[i] = 0;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	copy_decn(&AccDecn, &CURR_RECIP);
 | 
						copy_decn(&AccDecn, &CURR_RECIP);
 | 
				
			||||||
	//do newton-raphson iterations
 | 
						//do newton-raphson iterations
 | 
				
			||||||
	for (i = 0; i < 6; i++){ //just fix number of iterations for now
 | 
						for (i = 0; i < 6; i++){ //just fix number of iterations for now
 | 
				
			||||||
@ -894,7 +892,7 @@ void recip_decn(void){
 | 
				
			|||||||
		//Accum *= -1
 | 
							//Accum *= -1
 | 
				
			||||||
		negate_decn(&AccDecn);
 | 
							negate_decn(&AccDecn);
 | 
				
			||||||
		//Accum += 1
 | 
							//Accum += 1
 | 
				
			||||||
		copy_decn(&BDecn, &DECN_1);
 | 
							set_decn_one(&BDecn);
 | 
				
			||||||
		add_decn();
 | 
							add_decn();
 | 
				
			||||||
#ifdef DEBUG_DIV
 | 
					#ifdef DEBUG_DIV
 | 
				
			||||||
		decn_to_str_complete(&AccDecn);
 | 
							decn_to_str_complete(&AccDecn);
 | 
				
			||||||
@ -964,7 +962,7 @@ void ln_decn(void){
 | 
				
			|||||||
	printf("ln() accum scaled between 1,10: %s\n", Buf);
 | 
						printf("ln() accum scaled between 1,10: %s\n", Buf);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	//get initial estimate (accum = 10 - A)
 | 
						//get initial estimate (accum = 10 - A)
 | 
				
			||||||
	copy_decn(&BDecn, &DECN_1);
 | 
						set_decn_one(&BDecn);
 | 
				
			||||||
	BDecn.exponent = 1; //BDecn = 10
 | 
						BDecn.exponent = 1; //BDecn = 10
 | 
				
			||||||
	negate_decn(&AccDecn);
 | 
						negate_decn(&AccDecn);
 | 
				
			||||||
	add_decn();
 | 
						add_decn();
 | 
				
			||||||
@ -1141,7 +1139,7 @@ void exp_decn(void){
 | 
				
			|||||||
	//initial b = -10*ln(10)
 | 
						//initial b = -10*ln(10)
 | 
				
			||||||
	copy_decn(&BDecn, &DECN_LN_10); //b=ln(10)
 | 
						copy_decn(&BDecn, &DECN_LN_10); //b=ln(10)
 | 
				
			||||||
	copy_decn(&SAVED, &AccDecn); //save = accum
 | 
						copy_decn(&SAVED, &AccDecn); //save = accum
 | 
				
			||||||
	copy_decn(&AccDecn, &DECN_1);
 | 
						set_decn_one(&AccDecn);
 | 
				
			||||||
	AccDecn.exponent = 1; //accum = 10
 | 
						AccDecn.exponent = 1; //accum = 10
 | 
				
			||||||
	mult_decn();             //accum =  10*ln(10)
 | 
						mult_decn();             //accum =  10*ln(10)
 | 
				
			||||||
	copy_decn(&BDecn, &AccDecn); //b =  10*ln(10)
 | 
						copy_decn(&BDecn, &AccDecn); //b =  10*ln(10)
 | 
				
			||||||
@ -1210,10 +1208,10 @@ void exp_decn(void){
 | 
				
			|||||||
	//build final value
 | 
						//build final value
 | 
				
			||||||
	// (currently accum = save = remainder)
 | 
						// (currently accum = save = remainder)
 | 
				
			||||||
	// calculate 1+remainder
 | 
						// calculate 1+remainder
 | 
				
			||||||
	copy_decn(&BDecn, &DECN_1);
 | 
						set_decn_one(&BDecn);
 | 
				
			||||||
	add_decn();
 | 
						add_decn();
 | 
				
			||||||
	//get initial multiplier (10) for ln(10)
 | 
						//get initial multiplier (10) for ln(10)
 | 
				
			||||||
	copy_decn(&BDecn, &DECN_1);
 | 
						set_decn_one(&BDecn);
 | 
				
			||||||
	BDecn.exponent = 1; //BDecn = 10
 | 
						BDecn.exponent = 1; //BDecn = 10
 | 
				
			||||||
	//do multiplies
 | 
						//do multiplies
 | 
				
			||||||
	j = UINT8_MAX; //becomes 0 after incrementing to start (1 + 10^-j) series
 | 
						j = UINT8_MAX; //becomes 0 after incrementing to start (1 + 10^-j) series
 | 
				
			||||||
@ -1275,7 +1273,7 @@ void exp10_decn(void){
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void pow_decn(void) {
 | 
					void pow_decn(void) {
 | 
				
			||||||
	if (decn_is_zero(&BDecn)) {
 | 
						if (decn_is_zero(&BDecn)) {
 | 
				
			||||||
		copy_decn(&AccDecn, &DECN_1);
 | 
							set_decn_one(&AccDecn);
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (decn_is_zero(&AccDecn)) {
 | 
						if (decn_is_zero(&AccDecn)) {
 | 
				
			||||||
@ -1473,11 +1471,11 @@ void sincos_decn(const uint8_t sincos_arctan) {
 | 
				
			|||||||
		set_dec80_zero(&THETA);
 | 
							set_dec80_zero(&THETA);
 | 
				
			||||||
		if (is_negative) negate_decn(&AccDecn);
 | 
							if (is_negative) negate_decn(&AccDecn);
 | 
				
			||||||
		copy_decn(&COS, &AccDecn);
 | 
							copy_decn(&COS, &AccDecn);
 | 
				
			||||||
		copy_decn(&SIN, &DECN_1);
 | 
							set_decn_one(&SIN);
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		project_decn_into_0_2pi();
 | 
							project_decn_into_0_2pi();
 | 
				
			||||||
		copy_decn(&THETA, &AccDecn);
 | 
							copy_decn(&THETA, &AccDecn);
 | 
				
			||||||
		copy_decn(&COS, &DECN_1);
 | 
							set_decn_one(&COS);
 | 
				
			||||||
		set_dec80_zero(&SIN);
 | 
							set_dec80_zero(&SIN);
 | 
				
			||||||
		// 0.0 00 5
 | 
							// 0.0 00 5
 | 
				
			||||||
		SIN.lsu[2] = 50;
 | 
							SIN.lsu[2] = 50;
 | 
				
			||||||
@ -1549,7 +1547,7 @@ void arcsin_decn(void) {
 | 
				
			|||||||
	copy_decn(&BDecn, &AccDecn);
 | 
						copy_decn(&BDecn, &AccDecn);
 | 
				
			||||||
	mult_decn();
 | 
						mult_decn();
 | 
				
			||||||
	negate_decn(&AccDecn);
 | 
						negate_decn(&AccDecn);
 | 
				
			||||||
	copy_decn(&BDecn, &DECN_1);
 | 
						set_decn_one(&BDecn);
 | 
				
			||||||
	add_decn();
 | 
						add_decn();
 | 
				
			||||||
	sqrt_decn();
 | 
						sqrt_decn();
 | 
				
			||||||
	recip_decn();
 | 
						recip_decn();
 | 
				
			||||||
 | 
				
			|||||||
@ -69,6 +69,7 @@ extern __idata uint8_t TmpStackPtr;
 | 
				
			|||||||
void build_dec80(__xdata const char* signif_str, __xdata exp_t exponent);
 | 
					void build_dec80(__xdata const char* signif_str, __xdata exp_t exponent);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void set_dec80_zero(dec80* dest);
 | 
					void set_dec80_zero(dec80* dest);
 | 
				
			||||||
 | 
					void set_decn_one(dec80* dest);
 | 
				
			||||||
void set_dec80_NaN(dec80* dest);
 | 
					void set_dec80_NaN(dec80* dest);
 | 
				
			||||||
uint8_t decn_is_zero(const dec80* x);
 | 
					uint8_t decn_is_zero(const dec80* x);
 | 
				
			||||||
uint8_t decn_is_nan(const dec80* x);
 | 
					uint8_t decn_is_nan(const dec80* x);
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user