free up some flash space
This commit is contained in:
parent
273e2f5742
commit
a5e64e89d4
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);
|
||||||
|
Loading…
Reference in New Issue
Block a user