Skip to content

TrulsHenriksson/mpcalc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 

Repository files navigation

mpcalc

Simple command-line calculator with arbitrary precision, written in Python.

Examples

Get 100 digits (the default) of tau.

$ mpcalc "2*pi"
6.283185307179586476925286766559005768394338798750211641949889184615632812572417997256069650684234136

Verify the calculation from this Numberphile video. (Scroll to the end!)

$ mpcalc "1/998001" -d 3000
0.000001002003004005006007008009010011012013014015016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997999000001

Check that 0.1 + 0.2 really is 0.3.

$ mpcalc "0.1+0.2" -d 25 --all-digits
0.3000000000000000000000000

Compare with the result of using standard Python floats.

$ mpcalc "\0.1 + \0.2" -d 25 --all-digits
0.3000000000000000444089210

Show all digits of the Python float 1.1.

$ mpcalc "\1.1" -a
1.100000000000000088817841970012523233890533447265625000000000000000000000000000000000000000000000000

Store a hundred thousand digits of root 2 to a file.

$ mpcalc "sqrt(2)" -d 100_000 > root_two.txt

Evaluate the Gaussian integral.

$ mpcalc "quad(\lambda \x: exp(-\x**2), [-inf, inf])"
1.772453850905516027298167483341145182797549456122387128213807789852911284591032181374950656738544665
$ mpcalc "sqrt(pi)"
1.772453850905516027298167483341145182797549456122387128213807789852911284591032181374950656738544665

See 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')

⚠️ Important ⚠️

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.

Installation

  1. Install the requirements.

    $ pip install mpmath pyinstaller
  2. Clone the repository in the folder you want it.

    $ git clone https://github.com/TrulsHenriksson/mpcalc.git

    Alternatively, create a folder called mpcalc and just download the mpcalc.py file to it.

  3. Build the executable.

    $ pyinstaller mpcalc.py --hidden-import _pylong
  4. Add the location to your PATH.

    On Windows:
    Ctrl+XSystemAdvanced system settingsEnvironment variablesPath
    Add the [...]/mpcalc/dist/mpcalc/ folder to the list.

  5. Test the installation.

    Restart the console, and run:

    $ mpcalc -h

    You should see the help message confirming that it works.

Usage

Expression

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.

Command-line arguments

  • -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.

About

Simple command-line calculator with arbitrary precision.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages