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