I'm writing my own RealNumber class in Python to manage the digits after decimal point perfectly without losing any data. I don't want to use Decimal class in Python. But I'm stuck in the pow() function.
I want to calculate $ a^b $, where $ a, b \in\mathbb{R} $. Now, both $ a $ and $ b $ are objects of my RealNumber class. I'm using the $ \frac{P}{Q} $ Rational Number form to perform the power calculation.
I'm taking $ a = \frac{a_P}{a_Q}$, $ b = \frac{b_P}{b_Q} $. So, my calculation is -
$ a^b = \left(\frac{a_P}{a_Q}\right)^\frac{b_P}{b_Q} = \frac{\left(a_P\right)^{\frac{b_P}{b_Q}}}{\left(a_Q\right)^{\frac{b_P}{b_Q}}} = \frac{\sqrt[b_Q]{(a_P)^\left(b_p\right)}}{\sqrt[b_Q]{(a_Q)^\left(b_p\right)}} $.
But, using this, $ (-2) ^ {1.6} $ is giving a Real value, where it's value should be in Complex.
$ (-2)^{1.6} = \left(\frac{-2}{1}\right)^\frac{16}{10} = \frac{\left(-2\right)^{\frac{16}{10}}}{\left(1\right)^{\frac{16}{10}}} = \frac{\sqrt[10]{(-2)^{16}}}{\sqrt[10]{1^{16}}} = \frac{\sqrt[10]{65536}}{1} = \sqrt[10]{65536} =3.0314331330207964 $.
But, the value given by Python itself is $ (0.9367643554147161-2.8830642348724616j) $.
Where I'm making the mistake? Can anyone please help me to figure this out??
You can't do what you want with non positive numbers
$$\begin{align} (-2)^{1.6}&= (2e^{i\pi})^{1.6} = 2^{1.6} e^{i\frac{16\pi}{10}} \\ &= 2^{1.6} \cos\left(\frac{16\pi}{10} \right) + 2^{1.6} i\sin\left(\frac{16\pi}{10} \right)\\ &=\text{ the result python gave you.}\end{align}$$
So as expected python was right, and $j$ denotes the $i$ of math.