Open In App

sqrt, sqrtl and sqrtf in C++

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

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 <cmath> header file. It takes double as an argument. The <cmath> 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++ :

  1. sqrt (double)
  2. sqrtf (float)
  3. 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 Program to demonstrate errors in double sqrt()
#include <cmath>
#include <iostream>
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

15.000000000000
17.320508075689

Complexity Analysis

  • Time Complexity: O(?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 <cmath>
#include <iostream>
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

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 code to illustrate the use of sqrtf function
#include <cmath>
#include <iomanip>
#include <iostream>
 
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

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 program to illustrate the use of sqrtl function
#include <cmath>
#include <iomanip>
#include <iostream>
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

15.000000000000
17.320508956909

Complexity Analysis

  • Time Complexity: O(?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 code to illustrate the incorrectness of sqrt
// function
#include <cmath>
#include <iomanip>
#include <iostream>
 
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
999999999.999999999476

Complexity Analysis

  • Time Complexity: O(?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 correctness of sqrtl function
#include <cmath>
#include <iomanip>
#include <iostream>
 
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
1000000000.000000000000

2) Using sqrtl function

C++





Output

1000000000.000000000000
999999999.999999999476


Last Updated : 30 Jun, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads