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++ :

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

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

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

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