Simple command-line calculator with arbitrary precision, written in Python.
Get 100 digits (the default) of tau.
$ mpcalc "2*pi"
6.283185307179586476925286766559005768394338798750211641949889184615632812572417997256069650684234136Verify the calculation from this Numberphile video. (Scroll to the end!)
$ mpcalc "1/998001" -d 3000
0.000001002003004005006007008009010011012013014015016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997999000001Check that 0.1 + 0.2 really is 0.3.
$ mpcalc "0.1+0.2" -d 25 --all-digits
0.3000000000000000000000000Compare with the result of using standard Python floats.
$ mpcalc "\0.1 + \0.2" -d 25 --all-digits
0.3000000000000000444089210Show all digits of the Python float 1.1.
$ mpcalc "\1.1" -a
1.100000000000000088817841970012523233890533447265625000000000000000000000000000000000000000000000000Store a hundred thousand digits of root 2 to a file.
$ mpcalc "sqrt(2)" -d 100_000 > root_two.txtEvaluate the Gaussian integral.
$ mpcalc "quad(\lambda \x: exp(-\x**2), [-inf, inf])"
1.772453850905516027298167483341145182797549456122387128213807789852911284591032181374950656738544665
$ mpcalc "sqrt(pi)"
1.772453850905516027298167483341145182797549456122387128213807789852911284591032181374950656738544665See debug output.
$ mpcalc "quad(\lambda \x: exp(-\x**2), [-inf, inf])" --debug
Input: quad(\lambda \x: exp(-\x**2), [-inf, inf])
Replaced names: mp.quad(\lambda \x: mp.exp(-\x**2), [-mp.inf, mp.inf])
Replaced numbers: mp.quad(\lambda \x: mp.exp(-\x**NUMBERS['2']), [-mp.inf, mp.inf])
Contents of NUMBERS: {'2': mpf('2.0')}
Removed backslashes: mp.quad(lambda x: mp.exp(-x**NUMBERS['2']), [-mp.inf, mp.inf])
Result:
mpf('1.772453850905516027298167483341145182797549456122387128213807789852911284591032181374950656738544665413')This calculator uses Python's eval() function to evaluate arbitrary expressions - that's why it's possible
to use lambda functions as in the last two examples. Currently, the expressions are only allowed to contain
certain characters, but without more robust input validation this project should under no circumstances
be hooked up to the internet or be given more access than you trust it with.
-
Install the requirements.
$ pip install mpmath pyinstaller
-
Clone the repository in the folder you want it.
$ git clone https://github.com/TrulsHenriksson/mpcalc.git
Alternatively, create a folder called
mpcalcand just download thempcalc.pyfile to it. -
Build the executable.
$ pyinstaller mpcalc.py --hidden-import _pylong
-
Add the location to your PATH.
On Windows:
Ctrl+X→System→Advanced system settings→Environment variables→Path
Add the[...]/mpcalc/dist/mpcalc/folder to the list. -
Test the installation.
Restart the console, and run:
$ mpcalc -h
You should see the help message confirming that it works.
The expression is what's evaluated by the calculator. The only limitations on the expression is the characters it can contain (a-zA-Z0-9 _.,:=+-/*^&|()[]\), and what Python can evaluate using the eval function. Any function or constant name not escaped by a backslash (\) is taken from the mpmath module, and any non-escaped number is converted to mp.mpf (real) or mp.mpc (complex).
For list of mpmath functions and constants, see their documentation.
Also note that mpmath features plotting functions if you have the Python library matplotlib installed. Run pip install matplotlib if you don't.
-
-d [n],--digits [n]:Number of decimal digits that is used in the calculation. Defaults to 100.
-
-a,--all,--all-digits:Show all digits of the result, even when it ends in zeros.
-
--debug:Show debug output, which shows the steps taken to parse an expression.
-
-h,--help:Show help message.