mirror of
https://github.com/louisrubet/rpn
synced 2025-02-07 08:45:48 +01:00
#132: complex chs neg inv
This commit is contained in:
parent
4e655b3948
commit
84e7098963
2 changed files with 51 additions and 6 deletions
|
@ -237,19 +237,44 @@ void div()
|
||||||
void neg()
|
void neg()
|
||||||
{
|
{
|
||||||
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_neg(left->_value.mpfr, left->_value.mpfr, floating_t::s_mpfr_rnd));
|
CHECK_MPFR(mpfr_neg(left->_value.mpfr, left->_value.mpfr, floating_t::s_mpfr_rnd));
|
||||||
|
}
|
||||||
|
else if (_stack->get_type(0) == cmd_complex)
|
||||||
|
{
|
||||||
|
complex* left = (complex*)_stack->back();
|
||||||
|
CHECK_MPFR(mpfr_neg(left->re()->mpfr, left->re()->mpfr, floating_t::s_mpfr_rnd));
|
||||||
|
CHECK_MPFR(mpfr_neg(left->im()->mpfr, left->im()->mpfr, floating_t::s_mpfr_rnd));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ERR_CONTEXT(ret_bad_operand_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
void inv()
|
void inv()
|
||||||
{
|
{
|
||||||
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_si_div(left->_value.mpfr, 1L, left->_value.mpfr, floating_t::s_mpfr_rnd));
|
CHECK_MPFR(mpfr_si_div(left->_value.mpfr, 1L, left->_value.mpfr, floating_t::s_mpfr_rnd));
|
||||||
|
}
|
||||||
|
else if (_stack->get_type(0) == cmd_complex)
|
||||||
|
{
|
||||||
|
//1. duplicate
|
||||||
|
dup();
|
||||||
|
//2. set complex level 2 to (1,0)
|
||||||
|
complex* cplx = (complex*)_stack->get_obj(1);
|
||||||
|
CHECK_MPFR(mpfr_set_ui(cplx->re()->mpfr, 1UL, floating_t::s_mpfr_rnd));
|
||||||
|
CHECK_MPFR(mpfr_set_ui(cplx->im()->mpfr, 0UL, floating_t::s_mpfr_rnd));
|
||||||
|
//3. divide
|
||||||
|
do_divide_complexes();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ERR_CONTEXT(ret_bad_operand_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
void purcent()
|
void purcent()
|
||||||
|
|
|
@ -121,3 +121,23 @@ drop
|
||||||
re
|
re
|
||||||
-> error should be 2
|
-> error should be 2
|
||||||
drop
|
drop
|
||||||
|
|
||||||
|
# chs
|
||||||
|
(3.14,6.28) chs
|
||||||
|
-> stack should be (-3.14,-6.28)
|
||||||
|
drop
|
||||||
|
|
||||||
|
# neg
|
||||||
|
(-3.14,-6.28) neg
|
||||||
|
-> stack should be (3.14,6.28)
|
||||||
|
drop
|
||||||
|
|
||||||
|
# inv (1)
|
||||||
|
(2,4) inv
|
||||||
|
-> stack should be (0.1,-0.2)
|
||||||
|
drop
|
||||||
|
|
||||||
|
# inv (2)
|
||||||
|
(0.1,-0.2) inv
|
||||||
|
-> stack should be (2,4)
|
||||||
|
drop
|
||||||
|
|
Loading…
Add table
Reference in a new issue