Find cubic root of a number

Given a number n, find the cube root of n.

Examples:

```Input:  n = 3
Output: Cubic Root is 1.442250

Input: n = 8
Output: Cubic Root is 2.000000
```

Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

We can use binary search. First we define error e. Let us say 0.0000001 in our case. The main steps of our algorithm for calculating the cubic root of a number n are:

1. Initialize start = 0 and end = n
2. Calculate mid = (start + end)/2
3. Check if the absolute value of (n – mid*mid*mid) < e. If this condition holds true then mid is our answer so return mid.
4. If (mid*mid*mid)>n then set end=mid
5. If (mid*mid*mid)

Below is the implementation of above idea.

C++

```// C++ program to find cubic root of a number
// using Binary Search
#include <bits/stdc++.h>
using namespace std;

// Returns the absolute value of n-mid*mid*mid
double diff(double n,double mid)
{
if (n > (mid*mid*mid))
return (n-(mid*mid*mid));
else
return ((mid*mid*mid) - n);
}

// Returns cube root of a no n
double cubicRoot(double n)
{
// Set start and end for binary search
double start = 0, end = n;

// Set precision
double e = 0.0000001;

while (true)
{
double mid = (start + end)/2;
double error = diff(n, mid);

// If error is less than e then mid is
// our answer so return mid
if (error <= e)
return mid;

// If mid*mid*mid is greater than n set
// end = mid
if ((mid*mid*mid) > n)
end = mid;

// If mid*mid*mid is less than n set
// start = mid
else
start = mid;
}
}

// Driver code
int main()
{
double n = 3;
printf("Cubic root of %lf is %lf\n",
n, cubicRoot(n));
return 0;
}
```

Java

```// Java program to find cubic root of a number
// using Binary Search
import java.io.*;

class GFG
{
// Returns the absolute value of n-mid*mid*mid
static double diff(double n,double mid)
{
if (n > (mid*mid*mid))
return (n-(mid*mid*mid));
else
return ((mid*mid*mid) - n);
}

// Returns cube root of a no n
static double cubicRoot(double n)
{
// Set start and end for binary search
double start = 0, end = n;

// Set precision
double e = 0.0000001;

while (true)
{
double mid = (start + end)/2;
double error = diff(n, mid);

// If error is less than e then mid is
// our answer so return mid
if (error <= e)
return mid;

// If mid*mid*mid is greater than n set
// end = mid
if ((mid*mid*mid) > n)
end = mid;

// If mid*mid*mid is less than n set
// start = mid
else
start = mid;
}
}

// Driver program to test above function
public static void main (String[] args)
{
double n = 3;
System.out.println("Cube root of "+n+" is "+cubicRoot(n));
}
}

// This code is contributed by Pramod Kumar
```

Python3

```# Python 3 program to find cubic root
# of a number using Binary Search

# Returns the absolute value of
# n-mid*mid*mid
def diff(n, mid) :
if (n > (mid * mid * mid)) :
return (n - (mid * mid * mid))
else :
return ((mid * mid * mid) - n)

# Returns cube root of a no n
def cubicRoot(n) :

# Set start and end for binary
# search
start = 0
end = n

# Set precision
e = 0.0000001
while (True) :

mid = (start + end) / 2
error = diff(n, mid)

# If error is less than e
# then mid is our answer
# so return mid
if (error <= e) :
return mid

# If mid*mid*mid is greater
# than n set end = mid
if ((mid * mid * mid) > n) :
end = mid

# If mid*mid*mid is less
# than n set start = mid
else :
start = mid

# Driver code
n = 3
print("Cubic root of", n, "is",
round(cubicRoot(n),6))

# This code is contributed by Nikita Tiwari.
```

Output:

```Cubic root of 3.000000 is 1.442250
```

Time Complexity : O(Log n)

GATE CS Corner    Company Wise Coding Practice

3.7 Average Difficulty : 3.7/5.0
Based on 11 vote(s)