mirror of
https://github.com/louisrubet/rpn
synced 2025-02-07 08:45:48 +01:00
#132: added complex abs
This commit is contained in:
parent
2f41fb4c60
commit
ee1d99834a
2 changed files with 33 additions and 3 deletions
|
@ -347,12 +347,37 @@ void modulo()
|
||||||
void rpn_abs()
|
void rpn_abs()
|
||||||
{
|
{
|
||||||
MIN_ARGUMENTS(1);
|
MIN_ARGUMENTS(1);
|
||||||
ARG_MUST_BE_OF_TYPE(0, cmd_number);
|
|
||||||
|
|
||||||
|
if (_stack->get_type(0) == cmd_number)
|
||||||
|
{
|
||||||
number* left = (number*)_stack->back();
|
number* left = (number*)_stack->back();
|
||||||
|
|
||||||
CHECK_MPFR(mpfr_abs(left->_value.mpfr, left->_value.mpfr, floating_t::s_mpfr_rnd));
|
CHECK_MPFR(mpfr_abs(left->_value.mpfr, left->_value.mpfr, floating_t::s_mpfr_rnd));
|
||||||
}
|
}
|
||||||
|
else if (_stack->get_type(0) == cmd_complex)
|
||||||
|
{
|
||||||
|
//1. copy out -> calc x2+iy2
|
||||||
|
stack::copy_and_push_back(*_stack, _stack->size()-1, _branch_stack);
|
||||||
|
_stack->pop_back();
|
||||||
|
|
||||||
|
//2. calc x2+iy2
|
||||||
|
complex* cplx = (complex*)_branch_stack.back();
|
||||||
|
CHECK_MPFR(mpfr_mul(cplx->re()->mpfr, cplx->re()->mpfr, cplx->re()->mpfr, floating_t::s_mpfr_rnd));
|
||||||
|
CHECK_MPFR(mpfr_mul(cplx->im()->mpfr, cplx->im()->mpfr, cplx->im()->mpfr, floating_t::s_mpfr_rnd));
|
||||||
|
|
||||||
|
//3. new real on stack
|
||||||
|
_stack->allocate_back(number::calc_size(), cmd_number);
|
||||||
|
number* module = (number*)_stack->back();
|
||||||
|
|
||||||
|
//4. set it to |x2+y2| then take sqrt
|
||||||
|
CHECK_MPFR(mpfr_set(module->_value.mpfr, cplx->re()->mpfr, floating_t::s_mpfr_rnd));
|
||||||
|
CHECK_MPFR(mpfr_add(module->_value.mpfr, module->_value.mpfr, cplx->im()->mpfr, floating_t::s_mpfr_rnd));
|
||||||
|
CHECK_MPFR(mpfr_sqrt(module->_value.mpfr, module->_value.mpfr, floating_t::s_mpfr_rnd));
|
||||||
|
|
||||||
|
_branch_stack.pop_back();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ERR_CONTEXT(ret_bad_operand_type);
|
||||||
|
}
|
||||||
|
|
||||||
void hex()
|
void hex()
|
||||||
{
|
{
|
||||||
|
|
|
@ -141,3 +141,8 @@ drop
|
||||||
(0.1,-0.2) inv
|
(0.1,-0.2) inv
|
||||||
-> stack should be (2,4)
|
-> stack should be (2,4)
|
||||||
drop
|
drop
|
||||||
|
|
||||||
|
# abs
|
||||||
|
(3,4) abs
|
||||||
|
-> stack should be 5
|
||||||
|
drop
|
||||||
|
|
Loading…
Add table
Reference in a new issue