Merge branch 'expm-lnp1' into develop

This commit is contained in:
Louis Rubet 2018-05-06 15:02:02 +02:00
commit 313e1b9712
3 changed files with 113 additions and 30 deletions

View file

@ -12,7 +12,6 @@ program::keyword_t program::s_keywords[] =
{ cmd_keyword, "help", &program::rpn_help, "this help message" },
{ cmd_keyword, "h", &program::rpn_help, "" },
{ cmd_keyword, "?", &program::rpn_help, "" },
{ cmd_keyword, "q", &program::rpn_good_bye, "" },
{ cmd_keyword, "quit", &program::rpn_good_bye, "quit software" },
{ cmd_keyword, "q", &program::rpn_good_bye, "" },
{ cmd_keyword, "exit", &program::rpn_good_bye, "" },
@ -177,7 +176,9 @@ program::keyword_t program::s_keywords[] =
{ cmd_keyword, "e", &program::rpn_e, "Euler constant" },
{ cmd_keyword, "ln", &program::rpn_ln, "logarithm base e" },
{ cmd_keyword, "log", &program::rpn_ln, "" },
{ cmd_keyword, "lnp1", &program::rpn_lnp1, "ln(1+x) which is useful when x is close to 0" },
{ cmd_keyword, "exp", &program::rpn_exp, "exponential" },
{ cmd_keyword, "expm", &program::rpn_expm, "exp(x)-1 which is useful when x is close to 0" },
{ cmd_keyword, "log10", &program::rpn_log10, "logarithm base 10" },
{ cmd_keyword, "alog10", &program::rpn_alog10, "exponential base 10" },
{ cmd_keyword, "exp10", &program::rpn_alog10, "" },

View file

@ -154,6 +154,40 @@ void rpn_exp()
ERR_CONTEXT(ret_bad_operand_type);
}
void rpn_expm()
{
MIN_ARGUMENTS(1);
if (_stack->get_type(0) == cmd_number || _stack->get_type(0) == cmd_complex)
{
//exp(x)-1
rpn_exp();
number* one = (number*)_stack->allocate_back(number::calc_size(), cmd_number);
CHECK_MPFR(mpfr_set_d(one->_value.mpfr, 1.0, floating_t::s_mpfr_rnd));
rpn_minus();
}
else
ERR_CONTEXT(ret_bad_operand_type);
}
void rpn_lnp1()
{
MIN_ARGUMENTS(1);
if (_stack->get_type(0) == cmd_number || _stack->get_type(0) == cmd_complex)
{
//ln(x+1)
number* one = (number*)_stack->allocate_back(number::calc_size(), cmd_number);
CHECK_MPFR(mpfr_set_d(one->_value.mpfr, 1.0, floating_t::s_mpfr_rnd));
rpn_plus();
rpn_ln();
}
else
ERR_CONTEXT(ret_bad_operand_type);
}
void rpn_sinh()
{
MIN_ARGUMENTS(1);

View file

@ -326,7 +326,7 @@ del
# sqrt (2)
-3 sqrt
-> stack should be (-0.000000,1.732051)
-> stack should be (0.000000,1.732051)
del
# sin (1)
@ -469,6 +469,30 @@ del
-> stack should be (0.804719,2.034444)
del
# lnp1 (1)
(1,2) lnp1
(1,2) 1 + ln ==
-> stack should be 1.000000
del
# lnp1 (2)
(1,-2) lnp1
(1,-2) 1 + ln ==
-> stack should be 1.000000
del
# lnp1 (3)
(-1,-2) lnp1
(-1,-2) 1 + ln ==
-> stack should be 1.000000
del
# lnp1 (4)
(-1,2) lnp1
(-1,2) 1 + ln ==
-> stack should be 1.000000
del
# log (1)
(1,2) log
-> stack should be (0.804719,1.107149)
@ -549,6 +573,30 @@ del
-> stack should be (-0.153092,0.334512)
del
# expm (1)
(1,2) expm
(1,2) exp 1 - ==
-> stack should be 1.000000
del
# expm (2)
(1,-2) expm
(1,-2) exp 1 - ==
-> stack should be 1.000000
del
# expm (3)
(-1,-2) expm
(-1,-2) exp 1 - ==
-> stack should be 1.000000
del
# expm (4)
(-1,2) expm
(-1,2) exp 1 - ==
-> stack should be 1.000000
del
# alog2 (1)
(1,2) alog2
-> stack should be (0.366914,1.966055)