6.11.173 sqrt Function
Calculates the square root of a double precision floating-point value.
Include
<math.h>
Prototype
double sqrt(double x);
Argument
x
- a non-negative floating-point value
Return Value
Returns the non-negative square root of x
.
Remarks
If x
is less than 0, a domain error will occur and errno
will be set to EDOM
.
When targeting Cortex-M devices, MPLAB XC32 uses different algorithms for
sqrt()
, based on the optimization level selected. When level
s
optimizations (-Os
) have been specified, square roots
are performed using the Newton algorithm, which can produce smaller code. For all other
optimization levels, the Kahan algorithm is used. The square root for some values might differ
slightly based on the algorithm chosen, but in both cases, they should produce answers ±1 ulp
(unit of least precision).
Example
See the notes at the beginning of this chapter or section for
information on using printf()
or scanf()
(and other functions reading and writing the stdin
or
stdout
streams) in the example code.
#include <math.h>
#include <stdio.h>
#include <errno.h>
int main(void)
{
double x, y;
errno = 0;
x = 0.0;
y = sqrt(x);
if (errno)
perror("Error");
printf("The square root of %f is %f\n", x, y);
errno = 0;
x = 9.5;
y = sqrt(x);
if (errno)
perror("Error");
printf("The square root of %f is %f\n", x, y);
errno = 0;
x = -25.0;
y = sqrt(x);
if (errno)
perror("Error");
printf("The square root of %f is %f\n", x, y);
}
Example Output
The square root of 0.000000 is 0.000000
The square root of 9.500000 is 3.082207
Error: domain error
The square root of -25.000000 is nan