Sabemos que $$F_n = \frac{1}{\sqrt 5}(\varphi^n - \hat\varphi^n)$$ where $\varphi = \frac12\big(1+\sqrt 5\big)$ and $\hat\varphi = \frac12\big(1-\sqrt 5\big)$ as usual. Neglecting $\hat\varphi^n$, which is small when $n$ is large, we can calculate $$ n directamente como
$$n =\operatorname{round}\left \lbrace \frac{\log F_n + \log\sqrt 5}{\log \varphi} \right\rbrace $$ donde "la ronda" redondee al entero más cercano. Para la velocidad de cálculo debemos simplificar a:
$$n =\operatorname{round}\left \lbrace \alpha\cdot\log F_n+\beta \right\rbrace $$ where the $\alfa$ and $\beta$ constantes de precalculadas como:
$$\begin{array}{rcl}
\alpha & = \frac1{\log\varphi} & \approx 2.078087\\
\beta &= \frac{\log \sqrt 5}{\log \varphi} & \approx 1.672276
\end{array}
$$
Por ejemplo, lo $F_n=233$, nos encontramos con $n = \operatorname{round}{13.0000076556886} = 13$.
El cálculo de la necesidad de no realizarse de manera muy precisa, que sólo debe hacerse con la suficiente precisión para determinar el entero más cercano, y siempre sale muy cerca de ese entero. Si el valor cayó cerca de medio entero, uno podría tener que calcular el número de dígitos para determinar si fue un poco más o un poco menos de $n+\frac12$. Pero esto no ocurre nunca. El $13.0000076556886$ ejemplo de arriba es típico, y como $n$ aumenta el valor calculado se vuelve cada vez más cerca de la deseada entero.
Tenga en cuenta que uno puede aproximar el logaritmo simplemente contando el número de dígitos decimales en $F_n$ y luego multiplicando por $\log 10 \approx 2.302585$, o contando el número de bits en $F_n$ y multiplicando por $\log 2\approx 0.693147$. (Lo anterior no es correcto; uno tiene que ser más cuidadosos en la aproximación del logaritmo; ver abajo).
Desde $\alpha$ $\beta$ son constantes, pueden ser precalculadas y se utiliza en el programa a coste cero.
[ Anexo: yo no he hecho un análisis cuidadoso de la precisión con la que el logaritmo debe ser calculado, pero los experimentos sugieren que es baja, como ya he sugerido anteriormente. Por ejemplo, he probado el método siguiente para fudging el logaritmo:
- Tome $F_n$ y el recuento de los dígitos decimales.
- Multiplica esto por $2.3026$.
- Agrega el registro de los dos de la izquierda de los dígitos de $F_n$. (Sólo hay 90 posibles valores, los cuales pueden ser calculadas previamente y almacenado en una tabla de búsqueda.)
Este es lo suficientemente precisa para producir respuestas correctas para cada una de las $F_n$$n<1000$. ]