Co-authored-by: Andrii Siriak <siryaka@gmail.com>
This commit is contained in:
parent
12a4e27213
commit
2ffcff12fc
59
src/main/java/com/thealgorithms/maths/FastInverseSqrt.java
Normal file
59
src/main/java/com/thealgorithms/maths/FastInverseSqrt.java
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
/** Author : Siddhant Swarup Mallick
|
||||||
|
* Github : https://github.com/siddhant2002
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** Program description - To find out the inverse square root of the given number*/
|
||||||
|
|
||||||
|
/** Wikipedia Link - https://en.wikipedia.org/wiki/Fast_inverse_square_root */
|
||||||
|
|
||||||
|
|
||||||
|
package com.thealgorithms.maths;
|
||||||
|
|
||||||
|
public class FastInverseSqrt {
|
||||||
|
public static boolean inverseSqrt(float number) {
|
||||||
|
float x = number;
|
||||||
|
float xhalf = 0.5f * x;
|
||||||
|
int i = Float.floatToIntBits(x);
|
||||||
|
i = 0x5f3759df - (i >> 1);
|
||||||
|
x = Float.intBitsToFloat(i);
|
||||||
|
x = x * (1.5f - xhalf * x * x);
|
||||||
|
return x == (float)((float)1/(float)Math.sqrt(number));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the inverse square root of the given number upto 6 - 8 decimal places.
|
||||||
|
* calculates the inverse square root of the given number and returns true if calculated answer matches with given answer else returns false
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
public static boolean inverseSqrt(double number) {
|
||||||
|
double x = number;
|
||||||
|
double xhalf = 0.5d * x;
|
||||||
|
long i = Double.doubleToLongBits(x);
|
||||||
|
i = 0x5fe6ec85e7de30daL - (i >> 1);
|
||||||
|
x = Double.longBitsToDouble(i);
|
||||||
|
for (int it = 0; it < 4; it++) {
|
||||||
|
x = x * (1.5d - xhalf * x * x);
|
||||||
|
}
|
||||||
|
x *= number;
|
||||||
|
return x == 1/Math.sqrt(number);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Returns the inverse square root of the given number upto 14 - 16 decimal places.
|
||||||
|
* calculates the inverse square root of the given number and returns true if calculated answer matches with given answer else returns false
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OUTPUT :
|
||||||
|
* Input - number = 4522
|
||||||
|
* Output: it calculates the inverse squareroot of a number and returns true with it matches the given answer else returns false.
|
||||||
|
* 1st approach Time Complexity : O(1)
|
||||||
|
* Auxiliary Space Complexity : O(1)
|
||||||
|
* Input - number = 4522
|
||||||
|
* Output: it calculates the inverse squareroot of a number and returns true with it matches the given answer else returns false.
|
||||||
|
* 2nd approach Time Complexity : O(1)
|
||||||
|
* Auxiliary Space Complexity : O(1)
|
||||||
|
*/
|
@ -0,0 +1,56 @@
|
|||||||
|
package com.thealgorithms.maths;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public class FastInverseSqrtTests {
|
||||||
|
@Test
|
||||||
|
void testForOneElement()
|
||||||
|
{
|
||||||
|
assertFalse(FastInverseSqrt.inverseSqrt(1332));
|
||||||
|
// calls for the 2nd inverse method
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
void testForsecond()
|
||||||
|
{
|
||||||
|
assertFalse(FastInverseSqrt.inverseSqrt(1332f));
|
||||||
|
// calls for the 1st inverse method
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testForThird()
|
||||||
|
{
|
||||||
|
assertFalse(FastInverseSqrt.inverseSqrt(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testForFourth()
|
||||||
|
{
|
||||||
|
assertFalse(FastInverseSqrt.inverseSqrt(1f));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testForFifth()
|
||||||
|
{
|
||||||
|
assertFalse(FastInverseSqrt.inverseSqrt(4522));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testForSixth()
|
||||||
|
{
|
||||||
|
assertFalse(FastInverseSqrt.inverseSqrt(4522f));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testForSeventh()
|
||||||
|
{
|
||||||
|
assertFalse(FastInverseSqrt.inverseSqrt(21));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testForEighth()
|
||||||
|
{
|
||||||
|
assertFalse(FastInverseSqrt.inverseSqrt(21f));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user