I found the following answer here on Stackoverflow:
https://stackoverflow.com/a/356187/1829329
But it only works for integers as n in nth root:
import gmpy2 as gmpyresult = gmpy.root((1/0.213), 31.5).real
print('result:', result)
results in:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-14-eb4628226deb> in <module>()8
----> 9 result = gmpy.root((1/0.213), 31.5).real10 11 print('result:', result)TypeError: root() requires 'mpfr','int' arguments
What is a good and precise way to calculate such a root? (This is the python code representation of some formular, which I need to use to calculate in a lecture.)
EDIT#1
Here is my solution based on Spektre
's answer and information from the people over here at http://math.stackexchange.com.
import numpy as npdef naive_root(nth, a, datatype=np.float128):"""This function can only calculate the nth root, if the operand a is positive."""logarithm = np.log2(a, dtype=datatype)exponent = np.multiply(np.divide(1, nth, dtype=datatype), logarithm, dtype=datatype)result = np.exp2(exponent, dtype=datatype)return resultdef nth_root(nth, a, datatype=np.float128):if a == 0:print('operand is zero')return 0elif a > 0:print('a > 0')return naive_root(nth, a, datatype=datatype)elif a < 0:if a % 2 == 1:print('a is odd')return -naive_root(nth, np.abs(a))else:print('a is even')return naive_root(nth, np.abs(a))