Related Articles

# 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```

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*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.`

## 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``))``        ``return` `(``\$n` `- (``\$mid` `*``                ``\$mid` `* ``\$mid``));``    ``else``        ``return` `((``\$mid` `* ``\$mid` `*``                 ``\$mid``) - ``\$n``);``}` `// Returns cube root of a no n``function` `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)