Quadrado inverso rápido do dobro em C / C ++
Recentemente, eu estava criando um programa em que o hotspot é definitivamente esse
double d = somevalue();
double d2=d*d;
double c = 1.0/d2 // HOT SPOT
O valor d2 não é usado depois porque eu só preciso do valor c. Há algum tempo, eu li sobre o método Carmack de raiz quadrada inversa rápida, esse obviamente não é o caso, mas estou imaginando se algoritmos semelhantes podem me ajudar a calcular 1 / x ^ 2.
Preciso de precisão bastante precisa, verifiquei que meu programa não fornece resultados corretos com a opção gcc -ffast-math. (g ++ - 4,5)