Arbitrary-precision multiple-precision floats in Python: mpmath, gmpy, sympy .evalf() / N()

https://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic

- https://github.com/fredrik-johansson/mpmath
  > Python library for arbitrary-precision floating-point arithmetic
  - docs: http://mpmath.org/doc/current/
  - mpmath is used by SymPy and Sage
  - mpmath uses gmpy if it's installed (otherwise Python ints)

https://github.com/aleaxit/gmpy
  > General Multi-Precision arithmetic for Python 2.6+/3+ (GMP, MPIR, MPFR, MPC)
  - docs: https://gmpy2.readthedocs.io/en/latest/
  - Integers, Rationals, Reals, Complex

https://docs.sympy.org/latest/modules/evalf.html :

> Exact SymPy expressions can be converted to floating-point approximations (decimal numbers) using either the .evalf() method or the N() function.
> [...]
> By default, numerical evaluation is performed to an accuracy of 15 decimal digits. You can optionally pass a desired accuracy (which should be a positive integer) as an argument to evalf or N:
>>> N(sqrt(2)*pi, 5)
4.4429
>>> N(sqrt(2)*pi, 50)
4.4428829381583662470158809900606936986146216893757

On Sat, Oct 10, 2020 at 3:34 PM Marco Sulla <Marco.Sulla.Python@gmail.com> wrote:
On Sat, 10 Oct 2020 at 19:28, Tim Peters <tim.peters@gmail.com> wrote:
> Try to spell out what you mean - precisely! - by "this". I can't do
> that for you. For any plausible way of fleshing it out I've thought
> of, the answer is "no".

Well, please, don't be so harsh. I'm trying to discuss to someone that
co-created Python itself, it's not simple to me :-P

> The closest you can get to BigDecimal's behavior "by magic" in Python
> is to set the context precision to its maximum allowed value.

I think there's another "trick" to get the BigDecimal behaviour.
If you read the Javadoc, it says that each operation has a default
precision. For example, multiplication a*b has precision = a_scale +
b_scale. So, in reality, also BigDecimal has a context with finite
precision. The difference is that the default context has a variable
precision, depending on the operation.

Could Python decimal have something similar, maybe by setting prec = -1?
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-leave@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/O7KUARDPTMJ36FEYJTKGEUPHFG3A5BOG/
Code of Conduct: http://python.org/psf/codeofconduct/