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;
|
||||
//////////
|
||||
case '7':{ //y^x
|
||||
if (decn_is_nan(&stack(STACK_Y)) || decn_is_nan(&stack(STACK_X))){
|
||||
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();
|
||||
do_binary_op(pow_decn);
|
||||
} break;
|
||||
//////////
|
||||
} //switch(cmd)
|
||||
|
@ -80,11 +80,6 @@ __idata uint8_t TmpStackPtr;
|
||||
|
||||
__xdata char Buf[DECN_BUF_SIZE];
|
||||
|
||||
//1 constant
|
||||
const dec80 DECN_1 = {
|
||||
0, {10, 0}
|
||||
};
|
||||
|
||||
//ln(10) constant
|
||||
const dec80 DECN_LN_10 = {
|
||||
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 i;
|
||||
for (i = 0; i < DEC80_NUM_LSU; i++){
|
||||
@ -874,9 +874,7 @@ void recip_decn(void){
|
||||
} else {
|
||||
CURR_RECIP.lsu[0] = 10; //0.1 with implicit point and exponent
|
||||
}
|
||||
for (i = 1; i < DEC80_NUM_LSU; i++){
|
||||
CURR_RECIP.lsu[i] = 0;
|
||||
}
|
||||
zero_remaining_dec80(&CURR_RECIP, 1);
|
||||
copy_decn(&AccDecn, &CURR_RECIP);
|
||||
//do newton-raphson iterations
|
||||
for (i = 0; i < 6; i++){ //just fix number of iterations for now
|
||||
@ -894,7 +892,7 @@ void recip_decn(void){
|
||||
//Accum *= -1
|
||||
negate_decn(&AccDecn);
|
||||
//Accum += 1
|
||||
copy_decn(&BDecn, &DECN_1);
|
||||
set_decn_one(&BDecn);
|
||||
add_decn();
|
||||
#ifdef DEBUG_DIV
|
||||
decn_to_str_complete(&AccDecn);
|
||||
@ -964,7 +962,7 @@ void ln_decn(void){
|
||||
printf("ln() accum scaled between 1,10: %s\n", Buf);
|
||||
#endif
|
||||
//get initial estimate (accum = 10 - A)
|
||||
copy_decn(&BDecn, &DECN_1);
|
||||
set_decn_one(&BDecn);
|
||||
BDecn.exponent = 1; //BDecn = 10
|
||||
negate_decn(&AccDecn);
|
||||
add_decn();
|
||||
@ -1141,7 +1139,7 @@ void exp_decn(void){
|
||||
//initial b = -10*ln(10)
|
||||
copy_decn(&BDecn, &DECN_LN_10); //b=ln(10)
|
||||
copy_decn(&SAVED, &AccDecn); //save = accum
|
||||
copy_decn(&AccDecn, &DECN_1);
|
||||
set_decn_one(&AccDecn);
|
||||
AccDecn.exponent = 1; //accum = 10
|
||||
mult_decn(); //accum = 10*ln(10)
|
||||
copy_decn(&BDecn, &AccDecn); //b = 10*ln(10)
|
||||
@ -1210,10 +1208,10 @@ void exp_decn(void){
|
||||
//build final value
|
||||
// (currently accum = save = remainder)
|
||||
// calculate 1+remainder
|
||||
copy_decn(&BDecn, &DECN_1);
|
||||
set_decn_one(&BDecn);
|
||||
add_decn();
|
||||
//get initial multiplier (10) for ln(10)
|
||||
copy_decn(&BDecn, &DECN_1);
|
||||
set_decn_one(&BDecn);
|
||||
BDecn.exponent = 1; //BDecn = 10
|
||||
//do multiplies
|
||||
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) {
|
||||
if (decn_is_zero(&BDecn)) {
|
||||
copy_decn(&AccDecn, &DECN_1);
|
||||
set_decn_one(&AccDecn);
|
||||
return;
|
||||
}
|
||||
if (decn_is_zero(&AccDecn)) {
|
||||
@ -1473,11 +1471,11 @@ void sincos_decn(const uint8_t sincos_arctan) {
|
||||
set_dec80_zero(&THETA);
|
||||
if (is_negative) negate_decn(&AccDecn);
|
||||
copy_decn(&COS, &AccDecn);
|
||||
copy_decn(&SIN, &DECN_1);
|
||||
set_decn_one(&SIN);
|
||||
} else {
|
||||
project_decn_into_0_2pi();
|
||||
copy_decn(&THETA, &AccDecn);
|
||||
copy_decn(&COS, &DECN_1);
|
||||
set_decn_one(&COS);
|
||||
set_dec80_zero(&SIN);
|
||||
// 0.0 00 5
|
||||
SIN.lsu[2] = 50;
|
||||
@ -1549,7 +1547,7 @@ void arcsin_decn(void) {
|
||||
copy_decn(&BDecn, &AccDecn);
|
||||
mult_decn();
|
||||
negate_decn(&AccDecn);
|
||||
copy_decn(&BDecn, &DECN_1);
|
||||
set_decn_one(&BDecn);
|
||||
add_decn();
|
||||
sqrt_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 set_dec80_zero(dec80* dest);
|
||||
void set_decn_one(dec80* dest);
|
||||
void set_dec80_NaN(dec80* dest);
|
||||
uint8_t decn_is_zero(const dec80* x);
|
||||
uint8_t decn_is_nan(const dec80* x);
|
||||
|
Loading…
Reference in New Issue
Block a user