mirror of
https://github.com/louisrubet/rpn
synced 2025-01-30 20:34:30 +01:00
#137: added real commands ip fp floor ceil
This commit is contained in:
parent
fd61df18ca
commit
35dffadfe8
2 changed files with 44 additions and 0 deletions
|
@ -56,6 +56,10 @@ program::keyword_t program::s_keywords[] =
|
|||
{ cmd_keyword, "fact", &program::fact, "n! for integer n or Gamma(x+1) for fractional x" },
|
||||
{ cmd_keyword, "mant", &program::mant, "mantissa of a real number" },
|
||||
{ cmd_keyword, "xpon", &program::xpon, "exponant of a real number" },
|
||||
{ cmd_keyword, "floor", &program::rpn_floor, "largest number <=" },
|
||||
{ cmd_keyword, "ceil", &program::rpn_ceil, "smallest number >=" },
|
||||
{ cmd_keyword, "ip", &program::rpn_ip, "integer part" },
|
||||
{ cmd_keyword, "fp", &program::rpn_fp, "fractional part" },
|
||||
{ cmd_keyword, "min", &program::rpn_min, "min of 2 real numbers" },
|
||||
{ cmd_keyword, "max", &program::rpn_max, "max of 2 real numbers" },
|
||||
|
||||
|
|
|
@ -550,6 +550,46 @@ void xpon()
|
|||
ERR_CONTEXT(ret_out_of_range);
|
||||
}
|
||||
|
||||
void rpn_floor()
|
||||
{
|
||||
MIN_ARGUMENTS(1);
|
||||
ARG_MUST_BE_OF_TYPE(0, cmd_number);
|
||||
|
||||
number* left = (number*)_stack->back();
|
||||
|
||||
CHECK_MPFR(mpfr_floor(left->_value.mpfr, left->_value.mpfr));
|
||||
}
|
||||
|
||||
void rpn_ceil()
|
||||
{
|
||||
MIN_ARGUMENTS(1);
|
||||
ARG_MUST_BE_OF_TYPE(0, cmd_number);
|
||||
|
||||
number* left = (number*)_stack->back();
|
||||
|
||||
CHECK_MPFR(mpfr_ceil(left->_value.mpfr, left->_value.mpfr));
|
||||
}
|
||||
|
||||
void rpn_fp()
|
||||
{
|
||||
MIN_ARGUMENTS(1);
|
||||
ARG_MUST_BE_OF_TYPE(0, cmd_number);
|
||||
|
||||
number* left = (number*)_stack->back();
|
||||
|
||||
CHECK_MPFR(mpfr_frac(left->_value.mpfr, left->_value.mpfr, floating_t::s_mpfr_rnd));
|
||||
}
|
||||
|
||||
void rpn_ip()
|
||||
{
|
||||
MIN_ARGUMENTS(1);
|
||||
ARG_MUST_BE_OF_TYPE(0, cmd_number);
|
||||
|
||||
number* left = (number*)_stack->back();
|
||||
|
||||
CHECK_MPFR(mpfr_trunc(left->_value.mpfr, left->_value.mpfr));
|
||||
}
|
||||
|
||||
void rpn_min()
|
||||
{
|
||||
MIN_ARGUMENTS(2);
|
||||
|
|
Loading…
Add table
Reference in a new issue