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
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:
- Initialize start = 0 and end = n
- Calculate mid = (start + end)/2
- Check if the absolute value of (n – mid*mid*mid) < e. If this condition holds true then mid is our answer so return mid.
- If (mid*mid*mid)>n then set end=mid
- 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 <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; } |
chevron_right
filter_none
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 |
chevron_right
filter_none
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. |
chevron_right
filter_none
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. |
chevron_right
filter_none
PHP
<?php // PHP program to find cubic root // of a number using Binary Search // Returns the absolute value // of n - mid * mid * mid function 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 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. ?> |
chevron_right
filter_none
Output:
Cubic root of 3.000000 is 1.442250
Time Complexity : O(Log n)
This article is contributed by Madhur Modi .If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Recommended Posts:
- Find square root of number upto given precision using binary search
- Cubic Bezier Curve Implementation in C
- N-th root of a number
- Find Square Root under Modulo p | Set 1 (When p is in form of 4*i + 3)
- Smallest root of the equation x^2 + s(x)*x - n = 0, where s(x) is the sum of digits of root x.
- Square root of a number using log
- Program to find root of an equations using secant method
- Find Square Root under Modulo p | Set 2 (Shanks Tonelli algorithm)
- Print a number containing K digits with digital root D
- Primitive root of a prime number n modulo n
- Number of elements smaller than root using preorder traversal of a BST
- Fast method to calculate inverse square root of a floating point number in IEEE 754 format
- Check if a number is perfect square without finding square root
- Find minimum number to be divided to make a number a perfect square
- Find the smallest number whose digits multiply to a given number n
Improved By : nitin mittal