He estado haciendo un montón de cálculos que involucran coseno y he notado un patrón. Pasé algún tiempo y desarrolló este algoritmo para calcular los cosenos.
Para calcular el $\cos(x)$ donde $x$ está en radianes:
Desinfectar la entrada de manera que $x$ es $[0,2\pi)$:
$x_1 \gets (|x| \mod 2\pi )$
Dividir por $\pi$. Esto por lo general es bastante trivial como radianes a menudo se expresan como múltiplos de $\pi$.
$x_2 \gets x_1/\pi$
Esto es donde las cosas se ponen interesantes. El uso de la operación XOR en modo bit:
$x_3 \gets x_2 \veebar 2x_2$
Aquí vamos a expresar $x_3$ en binario y mapa de su bits a las señales en una repetición de la raíz de 2, el cual será asignado a $x_4$. Esto es más fácil de ilustrar con un ejemplo más que con una fórmula:
Por último, dividir por 2:
$x_5 \gets x_4/2$
Esto resultará en la $\cos(x)$, es decir, $\cos(x) = x_5$.
He utilizado este algoritmo bastante mucho ahora, y estoy seguro de que se calcula con precisión los cosenos, pero no puedo explicar por qué no iba a ser de esta relación entre el coseno y la operación XOR bit a bit.
¿Por qué esta relación existe? Por favor alguien puede explicar por qué los cosenos estaría relacionado con el operador XOR bit a bit como este.
Gracias!
Editar:
Para aquellos de ustedes que quieren una descripción más técnica para el paso 4, me tendrá que definir algunas cosas primero:
Una función de $D$ que devuelve el valor de un dígito $d$ para un determinado número de $n$ en una base $b$:
$$D(n,d,b) = \left \lfloor{n \cdot b^{-d}} \right \rfloor \mod b$$
Una función recursiva $f$ que construye repetido raíces de 2 con $N$ radicales de los bits de $x$ asignado a los signos:
$$f(x,n,N) = \begin{cases} 0 & n\geq N \\ (-1)^{D(x,-n,2)}\sqrt{2+f(x,n+1,N)} & n \lt N \end{casos} $$
Una función de $F$ que se lleva a los límites de procesamiento de todos los bits de $x$ en la repetición de una raíz:
$$F(x) = \lim_{N\to\infty} f(x,0,N)$$
Con los definidos, el paso 4 de arriba sería: $x_4 \gets F(x_3)$