It has been a while since I started thinking about this problem: a fast method to evaluate (in an approximate way) mentally the $n-$th root of a number $N$. I'm talking about great numbers, because otherwise one could handle with the first terms of a Taylor series.

I found time ago a really cute approximation for the square root, which runs like this: you have $N$, and you always can write $N$ as

$$N = q^2 + s$$

Where $q^2$ is the nearest $N$ perfect square, and $s$ is the remainder. Trivial example: $50 = 49 + 1$.

Thanks to that, one can approximate

$$\sqrt{N} = \sqrt{q^2 \pm s} \approx q \pm \frac{s}{2q}$$

Fast example

$$\sqrt{43} = \sqrt{36 + 7} \approx 6 + \frac{7}{12} = 6 + 0.58333 = 6.58333(..)$$

Where actually

$$\sqrt{43} = 6.55743(...)$$

So somehow one may compute it mentally in a quite easy and fast way.

The $n-$th problem

I started then to think about if such a method could be generalized for some $n-$th square root. With intuition (and a lot of naiveness) I thought about a sort of "mathematical symmetry", something like

$$\sqrt[n]{N} = \sqrt[n]{q^n \pm s} \approx q \pm \frac{s}{nq^{n-1}}$$

But I don't know if that may work in general. For example:

$$\sqrt[4]{600} = \sqrt[4]{625 - 25} = \sqrt[4]{5^4 - 25} \approx 5 - \frac{25}{4\cdot 5^{4-1}} = 5 - 0.05 = 4.95$$

And surprisingly

$$4.95^4 = 600.3725(...)$$

BUT if we mind with the plus sign...

$$\sqrt[4]{600} = \sqrt[4]{256 + 344} = \sqrt[4]{4^4 + 344} \approx 4 + \frac{344}{4\cdot 4^3} = 1.34375 = 5.34375$$

Where

$$5.34375^4 = 815.4259(...)$$

So it seems like it works if we pick the correct sign namely when the remainder $s$ is quite small.

What I'm asking for is for the existence of a pretty simple form to approximate roots, namely something like

$$\sqrt[n]{N} = \sqrt[n]{q^n + s} \approx q + f(s, q, n)$$

In which $f(s, q, n)$ is some good simple function (simple = not a sum of terms, just one).

Or my "intuition" is good enough to work? (Always with picking the correct decision about $\pm$ et cetera)

Thank you all!


Let $f(x) = x^{1 \over n}$.

Then $f(N+h) \approx f(N) + hf'(N)$ becomes

$(N+h)^{1 \over n} \approx N^{1 \over n} + \dfrac{hN^{1 \over n}}{nN}$

So, if you want to approximate $600^{1 \over 4}$:

  • $4^4 = 256 \lt 600 \lt 625 = 5^4$
  • Choose $N = 5^4 = 625$ and $h = 600-625 = -25$.
  • $600^{1 \over 4} \approx 5 - \dfrac{25 \cdot 5}{4 \cdot 600} = 5.00 - 0.052 = 4.948$
  • To the nearest thousandth, $600^{1 \over 4} = 4.949$

Of course, the smaller $h$ is, relative to $N$, the better the approximation will be.

Approximation of error

\begin{align} (N+x)^{1 \over n} &= N^{1 \over n} \left( 1 + \dfrac hN \right)^{1 \over n} \\ &= N^{1 \over n} \sum_{k=0}^\infty \binom{1 \over n}{k}\left( \dfrac hN \right)^k \\ &\approx N^{1 \over n} \left( 1 + \left( \dfrac 1n\right)\left( \dfrac hN\right) - \left( \dfrac{n-1}{2n^2}\right)\left( \dfrac{h^2}{N^2}\right) \right)\\ &\approx N^{1 \over n} \left( 1 + \dfrac{h}{nN} - \dfrac{(n-1)h^2}{2n^2 N^2} \right) \end{align}

Which implies that the relative error is roughly

$100\dfrac{(n-1)h^2}{2n^2 N^2} \approx \dfrac{50}n \left( \dfrac hN \right)^2\%$

For the above example, this is $\dfrac{50}4 \left( \dfrac{25}{625} \right)^2\% = 0.02\%$


I experimented with this method on a graphing calculator. The method you are using is sound, but you are confusing yourself with the $\pm$; it is not necessary! Instead, use $$ \sqrt[n]{N} = \sqrt[n]{q^n+s} \approx q + \frac{N-q^n}{n \cdot q^{n-1} } $$

Notice the intent of the final expression. It defines a line tangent to the graph of $ f(x) = \sqrt[n]{x} $. This is known as Linear Approximation, which can be used to approximate a value on any function.

$q = f(x) $, where $ x \approx N^n $,

$ \frac{1}{n \cdot q^{n-1} } = \frac{df(x)}{dx} $ (the slope of the tangent line of $f(x)$),

and

$ {N-q^n} $ is the signed error of $x$.

The sign of the final term in the expression is not a "decision" to be made, rather it is a fact of the calculation.

Additionally, notice that the graph of $f(x)$ is concave down, where $x$ is positive. This means that your mental approximation of $f(x)$ will always be an overestimate, unless of course $f(x)$ is an integer.


There is a pretty simple form to approximate roots, called Newton-Raphson method:

Function (input value, input degree, input num_of_iterations, output root):
    Set root = value
    Repeat num_of_iterations:
        Set temp = root^(degree-1)
        Set root = root-(root*temp-value)/(degree*temp)

Python implementation:

def Function(value,degree,num_of_iterations):
    root = float(value)
    for n in range(0,num_of_iterations):
        temp = root**(degree-1)
        root = root-(root*temp-value)/(degree*temp)
    return root

$3$ or $4$ iterations are typically sufficient for a good approximation.