From 96da73ca3e2babed253450b8415d8655faeff6d3 Mon Sep 17 00:00:00 2001 From: Louis Rubet Date: Fri, 16 Jun 2017 10:55:37 +0200 Subject: [PATCH] #133: added complex im --- src/program.cpp | 1 + src/rpn-complex.hpp | 15 ++++++++++++++- test/10-complex.txt | 15 +++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/program.cpp b/src/program.cpp index 1965c6f..533125c 100644 --- a/src/program.cpp +++ b/src/program.cpp @@ -59,6 +59,7 @@ program::keyword_t program::s_keywords[] = //COMPLEX { cmd_keyword, "re", &program::re, "complex real part" }, + { cmd_keyword, "im", &program::im, "complex imaginary part" }, //TEST { cmd_undef, "", NULL, "\nTEST"}, diff --git a/src/rpn-complex.hpp b/src/rpn-complex.hpp index 12097ed..8dc70ea 100644 --- a/src/rpn-complex.hpp +++ b/src/rpn-complex.hpp @@ -7,6 +7,19 @@ void re() _stack->pop_back(); number* re = (number*)_stack->allocate_back(number::calc_size(), cmd_number); - CHECK_MPFR(mpfr_set(re->_value.mpfr, ((number*)_branch_stack.get_obj(0))->_value.mpfr, floating_t::s_mpfr_rnd)); + CHECK_MPFR(mpfr_set(re->_value.mpfr, ((complex*)_branch_stack.get_obj(0))->re()->mpfr, floating_t::s_mpfr_rnd)); + _branch_stack.pop_back(); +} + +void im() +{ + MIN_ARGUMENTS(1); + ARG_MUST_BE_OF_TYPE(0, cmd_complex); + + stack::copy_and_push_back(*_stack, _stack->size()-1, _branch_stack); + _stack->pop_back(); + + number* im = (number*)_stack->allocate_back(number::calc_size(), cmd_number); + CHECK_MPFR(mpfr_set(im->_value.mpfr, ((complex*)_branch_stack.get_obj(0))->im()->mpfr, floating_t::s_mpfr_rnd)); _branch_stack.pop_back(); } diff --git a/test/10-complex.txt b/test/10-complex.txt index a8a2d53..97aca07 100644 --- a/test/10-complex.txt +++ b/test/10-complex.txt @@ -122,6 +122,21 @@ re -> error should be 2 drop +# im (1) +(1.2,3.4) im +-> stack should be 3.4 +drop + +# im (2) +3 re +-> error should be 3 +drop + +# im (3) +re +-> error should be 2 +drop + # chs (3.14,6.28) chs -> stack should be (-3.14,-6.28)