Find a file
2022-02-28 18:18:07 +01:00
.github/workflows Fix ubuntu 20.04 in github action 2022-02-28 18:18:07 +01:00
doc v2.4.0-generation 2022-02-28 17:39:13 +01:00
linenoise-ng@e20977cddd v2.4.0-generation 2022-02-28 16:23:57 +01:00
mpreal@c45d0d522c refactoring I (objects) 2022-02-16 00:24:26 +01:00
src Correct manual 2022-02-28 18:10:25 +01:00
test hex and bin C99 representation test 2022-02-28 15:35:59 +01:00
.gitignore Add debug and release dirs in .gitignore 2022-02-22 16:35:05 +01:00
.gitmodules github action for tests 2022-02-23 16:59:37 +01:00
CHANGELOG.md v2.4.0-generation 2022-02-28 17:39:13 +01:00
CMakeLists.txt v2.4.0-generation 2022-02-28 17:39:13 +01:00
GENERATION.md v2.4.0-generation 2022-02-28 17:39:13 +01:00
LICENSE #35: CMake 2017-06-10 18:44:51 +02:00
MANUAL.md Correct manual 2022-02-28 18:10:25 +01:00
README.md Correct manual 2022-02-28 18:10:25 +01:00
TODO.md c++ google style, including cpplint 2022-02-24 22:03:19 +01:00

rpn - Reverse Polish Notation CLI calculator License: LGPLv3

A math functional language using reverse polish notation

rpn> 1 2 + 2 sqrt
2> 3
1> 1.4142135623730950488

Manipulating reals, complexes, strings, variables on a stack

rpn> 1 2 + 2
2> 3
1> 2
rpn> r->c sq conj (1,1) /
(-3.5,-8.5)
rpn> "sqrt of 2 is " 2 sqrt ->str +
"sqrt of 2 is 1.4142135623730950488016887242096980786"
rpn> << -> x << x 3 ^ 2 x * - 3 + >> >> 'f' sto
rpn> 2 f
7
rpn> (1,2) f
(-10,-6)

Arbitrary precision provided by GNU MPFR

rpn> 256 prec
rpn> pi
3.1415926535897932384626433832795028841971693993751058209749445923078164062862
rpn>

Variables, structured programming

rpn> « rot * swap 2 / chs dup sq rot - sqrt » 'quad' sto
rpn> 0 1 10000 for i i sq + next
333383335000
rpn> a 1 > if then a sq 'calc' eval else 'stop' eval end

Available functions

rpn> 
Display all 146 possibilities? (y or n)
nop      pow      conj     <        pick     step     eval     exp10
help     sqrt     arg      <=       depth    ift      ->       log2
h        sq       c->r     !=       roll     ifte     pi       alog2
?        abs      r->c     ==       rolld    do       sin      exp2
quit     sign     p->r     and      over     until    asin     sinh
q        %        r->p     or       ->str    while    cos      asinh
exit     %CH      std      xor      str->    repeat   acos     cosh
test     mod      fix      not      chr      sto      tan      acosh
version  fact     sci      same     num      rcl      atan     tanh
uname    mant     prec     swap     size     purge    d->r     atanh
history  xpon     round    drop     pos      vars     r->d     time
+        floor    default  drop2    sub      clusr    e        date
-        ceil     type     dropn    if       edit     ln       ticks
*        ip       hex      del      then     sto+     log
/        fp       dec      erase    else     sto-     lnp1
inv      min      bin      rot      end      sto*     exp
chs      max      base     dup      start    sto/     expm
neg      re       >        dup2     for      sneg     log10
^        im       >=       dupn     next     sinv     alog10

Download

Available as source code and flatpak under flathub (coming soon).

Manual

A reference manual is provided here

Generation

rpn is written in C++ and is dynamically linked against GNU MP and GNU MPFR. It integrates linenoise-ng and mpreal code as git submodules.

It can be generated following the steps below:

Generate and install under Ubuntu 20.04 LTS

sudo apt install git cmake g++ libmpfr6 libmpfr-dev
git clone https://github.com/louisrubet/rpn/ 
mkdir -p rpn/build && cd rpn/build
cmake ..
make -j
sudo make install

Generate and install under Fedora 35

sudo dnf install git cmake g++ mpfrf mpfr-devel
git clone https://github.com/louisrubet/rpn/ 
mkdir -p rpn/build && cd rpn/build
cmake ..
make -j
sudo make install

Contact, contribution, bug report

Please email me at louis@rubet.fr

You can also use github issues and pull requests