Find cubic root of a number (original) (raw)

Last Updated : 1 Sep, 2022

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

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.

Try It Yourselfredirect icon

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-midmidmid double diff(double n,double mid) { if (n > (midmidmid)) return (n-(midmidmid)); else return ((midmidmid) - 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-midmidmid static double diff(double n,double mid) { if (n > (midmidmid)) return (n-(midmidmid)); else return ((midmidmid) - 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-midmidmid

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.

C#

// C# program to find cubic root // of a number using Binary Search using 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 * midmid)) return ($n - ($mid * mid∗mid * midmid)); else return (($mid * $mid * mid)−mid) - mid)n); } // Returns cube root of a no n function cubicRoot($n) { // Set start and end // for binary search $start = 0; end=end = end=n; // Set precision $e = 0.0000001; while (true) { mid=((mid = ((mid=((start + $end)/2); error=diff(error = diff(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 * midmid) > $n) end=end = end=mid; // If mid*mid*mid is // less than n set // start = mid else start=start = 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(logn)

Auxiliary Space: O(1)