sqrt, sqrtl and sqrtf in C++ (original) (raw)
There are various functions available in the C++ Library to calculate the square root of a number. Most prominently, **sqrt is used that is defined in ****** header file. It takes **double as an argument. The ****** header defines two more inbuilt functions for calculating the square root of a number (apart from sqrt) which has an argument of type **float and **long double.
**Following are the functions used for calculating square root in C++ :
- sqrt (double)
- sqrtf (float)
- sqrtl (long double)
**The above functions have been discussed in detail below:
1. sqrt()
The sqrt() function returns the square root of a number of type double.
Syntax
double **sqrt(double _arg);
Example: Program to illustrate the use of sqrt function
C++ `
// CPP code to illustrate the use of sqrt function #include #include #include using namespace std;
// Driver Code int main() { double val1 = 225.0; double val2 = 300.0;
// Calculate and print the square root of val1
cout << fixed << setprecision(12) << sqrt(val1) << endl;
// Calculate and print the square root of val2
cout << fixed << setprecision(12) << sqrt(val2) << endl;
return (0);}
`
Output
15.000000000000 17.320508075689
Complexity Analysis
- **Time Complexity: O(log n)
- **Auxiliary Space: O(1)
Errors and Exceptions Associated with sqrt() Function
**1. It is mandatory to give the argument otherwise, it will give an error **no matching function for call to 'sqrt()' as shown below.
C++ `
// CPP Program to demonstrate errors in double sqrt() #include #include using namespace std;
// Driver Code int main() { double answer;
// no value is passed as parameter
answer = sqrt();
cout << "Square root of " << a << " is " << answer
<< endl;
return 0;}
`
**Output
prog.cpp:9:19: error: no matching function for call to ‘sqrt()’ answer = sqrt();
**2. If we pass a negative value in the argument domain error occurs and the output will be the **Square root of -a, which is -nan.
CPP `
// CPP Program to demonstrate errors in double sqrt() #include #include using namespace std;
// Driver Code int main() { double a = -2, answer; // Calculate the square root of a answer = sqrt(a); cout << "Square root of " << a << " is " << answer << endl;
return 0;}
`
Output
Square root of -2 is -nan
2. sqrtf()
The sqrtf() function returns the square root of a number of type float.
Syntax
float **sqrtf(float _arg)
Example: Program to illustrate the use of sqrtf function
C++ `
// CPP code to illustrate the use of sqrtf function #include #include #include
using namespace std;
int main() { float val1 = 225.0; float val2 = 300.0; // Calculate and print the square root of val1 cout << fixed << setprecision(12) << sqrtf(val1) << endl; // Calculate and print the square root of val2 cout << fixed << setprecision(12) << sqrtf(val2) << endl;
return (0);}
`
Output
15.000000000000 17.320508956909
Complexity Analysis
- **Time Complexity: O(log n)
- **Auxiliary Space: O(1)
3. sqrtl()
The sqrtl() function returns the square root of a number of type long double with more precision.
Syntax
long double **sqrtl(long double _arg)
Example: Program to illustrate the use of sqrtl function
C++ `
// CPP program to illustrate the use of sqrtl function #include #include #include using namespace std; int main() { long long int var1 = 1000000000000000000; long long int var2 = 999999999999999999; // Calculate and print the square root of val1 cout << fixed << setprecision(12) << sqrtl(var1) << endl; // Calculate and print the square root of val2 cout << fixed << setprecision(12) << sqrtl(var2) << endl;
return 0;}
`
Output
1000000000.000000000000 999999999.999999999476
Complexity Analysis
- **Time Complexity: O(log n)
- **Auxiliary Space: O(1)
Advantage of sqrtl function
When working with integers of the order 1018, calculating its square root with **sqrt function may give an incorrect answer due to precision errors as default functions in programming language work with floats/doubles. But sqrtl function will always give an accurate answer.
Following is an illustration given below shows the exact difference when working with long integers with sqrt and sqrtl.
**1) Using sqrt function
C++ `
// CPP code to illustrate the incorrectness of sqrt // function #include #include #include
using namespace std;
int main() { long long int val1 = 1000000000000000000; long long int val2 = 999999999999999999;
// Calculate and print the square root of val1
cout << fixed << setprecision(12) << sqrt(val1) << endl;
// Calculate and print the square root of val2
cout << fixed << setprecision(12) << sqrt(val2) << endl;
return (0);}
`
Output
1000000000.000000000000 1000000000.000000000000
**2) Using sqrtl function
C++ `
// CPP code to illustrate the correctness of sqrtl function #include #include #include
using namespace std;
int main() { long long int val1 = 1000000000000000000; long long int val2 = 999999999999999999;
// Calculate and print the square root of val1
cout << fixed << setprecision(12) << sqrtl(val1)
<< endl;
// Calculate and print the square root of val2
cout << fixed << setprecision(12) << sqrtl(val2)
<< endl;
return (0);}
`
Output
1000000000.000000000000 999999999.999999999476