add sqrt() and 1/x functions
This commit is contained in:
parent
45e4dd25f8
commit
8e9f37c7d2
24
src/calc.c
24
src/calc.c
@ -107,19 +107,39 @@ void process_cmd(char cmd){
|
|||||||
set_dec80_zero(&stack(STACK_X));
|
set_dec80_zero(&stack(STACK_X));
|
||||||
} break;
|
} break;
|
||||||
//////////
|
//////////
|
||||||
case '<':{ //use as +/-
|
case '<':{ //use as +/- and sqrt
|
||||||
|
if (IsShifted){ //take sqrt
|
||||||
|
IsShifted = 0;
|
||||||
|
if (!decn_is_nan(&stack(STACK_X))){
|
||||||
|
copy_decn(&AccDecn, &stack(STACK_X));
|
||||||
|
if (AccDecn.exponent < 0){ //negative
|
||||||
|
set_dec80_NaN(&stack(STACK_X));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
set_dec80_zero(&BDecn);
|
||||||
|
BDecn.lsu[0] = 5;
|
||||||
|
pow_decn();
|
||||||
|
copy_decn(&stack(STACK_X), &AccDecn);
|
||||||
|
}
|
||||||
|
} else { // +/-
|
||||||
if (!decn_is_nan(&stack(STACK_X))){
|
if (!decn_is_nan(&stack(STACK_X))){
|
||||||
negate_decn(&stack(STACK_X));
|
negate_decn(&stack(STACK_X));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} break;
|
} break;
|
||||||
//////////
|
//////////
|
||||||
case 'r':{ //use as swap
|
case 'r':{ //use as swap and 1/x
|
||||||
|
if (IsShifted){ //take 1/x
|
||||||
|
IsShifted = 0;
|
||||||
|
do_unary_op(recip_decn);
|
||||||
|
} else { // swap
|
||||||
if (!decn_is_nan(&stack(STACK_X))){
|
if (!decn_is_nan(&stack(STACK_X))){
|
||||||
dec80 tmp;
|
dec80 tmp;
|
||||||
copy_decn(&tmp, &stack(STACK_X));
|
copy_decn(&tmp, &stack(STACK_X));
|
||||||
copy_decn(&stack(STACK_X), &stack(STACK_Y));
|
copy_decn(&stack(STACK_X), &stack(STACK_Y));
|
||||||
copy_decn(&stack(STACK_Y), &tmp);
|
copy_decn(&stack(STACK_Y), &tmp);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} break;
|
} break;
|
||||||
//////////
|
//////////
|
||||||
case 'm':{ //use as shift
|
case 'm':{ //use as shift
|
||||||
|
Loading…
Reference in New Issue
Block a user