Find cubic root of a number

• Difficulty Level : Medium
• Last Updated : 28 Jun, 2021

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)<n set start=mid.

Below is the implementation of above idea.

C++

 // C++ program to find cubic root of a number// using Binary Search#include using namespace std; // Returns the absolute value of n-mid*mid*middouble 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 ndouble 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 codeint 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 Searchimport 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*middef 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 ndef 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 coden = 3print("Cubic root of", n, "is",      round(cubicRoot(n),6))  # This code is contributed by Nikita Tiwari.

C#

 // C# program to find cubic root// of a number using Binary Searchusing System; 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 Code    public static void Main ()    {        double n = 3;        Console.Write("Cube root of "+ n                       + " is "+cubicRoot(n));    }} // This code is contributed by nitin mittal.

PHP

 (\$mid * \$mid * \$mid))        return (\$n - (\$mid *                \$mid * \$mid));    else        return ((\$mid * \$mid *                 \$mid) - \$n);} // Returns cube root of a no nfunction 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;    echo("Cubic root of \$n is ");    echo(cubicRoot(\$n)); // This code is contributed by nitin mittal.?>

Javascript



Output:

Cubic root of 3.000000 is 1.442250

Time Complexity : O(Log n)