Dado un número x de punto flotante de 32 bits almacenado en formato de punto flotante IEEE 754 , encuentre la raíz cuadrada inversa de x, es decir, x -1/2 .
Una solución simple es hacer aritmética de punto flotante. La siguiente es una función de ejemplo.
CPP
#include <iostream> #include <cmath> using namespace std; float InverseSquareRoot(float x) { return 1/sqrt(x); } int main() { cout << InverseSquareRoot(0.5) << endl; cout << InverseSquareRoot(3.6) << endl; cout << InverseSquareRoot(1.0) << endl; return 0; }
Java
import java.io.*; class GFG { static float InverseSquareRoot(float x) { return 1 / (float)Math.sqrt(x); } public static void main(String[] args) { System.out.println(InverseSquareRoot(0.5f)); System.out.println(InverseSquareRoot(3.6f)); System.out.println(InverseSquareRoot(1.0f)); } } // This code is contributed by souravmahato348.
Python3
# Python code for the above approach from math import ceil, sqrt def InverseSquareRoot(x) : return 1/sqrt(x) # Driver Code print(InverseSquareRoot(0.5) ) print(InverseSquareRoot(3.6) ) print(InverseSquareRoot(1.0) ) # This code is contributed by code_hunt.
C#
using System; class GFG { static float InverseSquareRoot(float x) { return 1 / (float)Math.Sqrt(x); } public static void Main() { Console.WriteLine(InverseSquareRoot(0.5f)); Console.WriteLine(InverseSquareRoot(3.6f)); Console.WriteLine(InverseSquareRoot(1.0f)); } } // This code is contributed by subham348.
Javascript
<script> // JavaScript code for the above approach function InverseSquareRoot(x) { return 1 / Math.sqrt(x); } // Driver Code document.write(InverseSquareRoot(0.5) + "<br/>"); document.write(InverseSquareRoot(3.6) + "<br/>"); document.write(InverseSquareRoot(1.0) + "<br/>"); // This code is contributed by sanjoy_62. </script>
Producción:
1.41421 0.527046 1
El siguiente es un método rápido e interesante basado en lo mismo. Vea esto para una explicación detallada.
C
#include <iostream> using namespace std; // This is fairly tricky and complex process. For details, see // http://en.wikipedia.org/wiki/Fast_inverse_square_root float InverseSquareRoot(float x) { float xhalf = 0.5f*x; int i = *(int*)&x; i = 0x5f3759d5 - (i >> 1); x = *(float*)&i; x = x*(1.5f - xhalf*x*x); return x; } int main() { cout << InverseSquareRoot(0.5) << endl; cout << InverseSquareRoot(3.6) << endl; cout << InverseSquareRoot(1.0) << endl; return 0; }
Producción:
1.41386 0.526715 0.998307
Fuente:
http://en.wikipedia.org/wiki/Fast_inverse_square_root
Este artículo es una contribución de Shalki Agarwal . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA