*Compute the arctangent, determining the quadrant*

#include <math.h> double atan2( doubley, doublex); float atan2f( floaty, floatx); long double atan2l( long doubley, long doublex);

`y`,`x`- The value (
`y`/`x`) for which you want to find the angle.

These functions compute the value of the
arctangent (in radians) of `y`/`x`,
using the signs of both arguments
to determine the quadrant of the return value.
No errors occur if both arguments are zero, or if `y` is zero.

To check for error situations, use feclearexcept() and fetestexcept(). For example:

- Call
`feclearexcept(FE_ALL_EXCEPT)`before calling atan2(), atan2f(), or atan2l(). - On return, if
`fetestexcept(FE_ALL_EXCEPT)`is nonzero, then an error has occurred.

The arctangent of `y/x`, in the range [-`π`, `π`].

If y is: |
And x is: |
These functions return: | Errors: |
---|---|---|---|

±0.0 | Negative or -0.0 | π, with the same sign as y (see below) |
— |

±0.0 | Positive or +0.0 | 0.0 (see below) | — |

±Inf | Finite | π/2, with the same sign as y |
— |

±Inf | -Inf | 3π/4, with the same sign as y |
— |

±Inf | Inf | π/4, with the same sign as y |
— |

Negative | ±0.0 | -π/2 |
— |

Positive | ±0.0 | +π/2 |
— |

Finite and positive | -Inf | +π |
— |

Finite and negative | -Inf | -π |
— |

Finite and positive | Inf | 0.0 | — |

Finite and negative | Inf | -0.0 | — |

Any value | NaN | x |
— |

NaN | Any value | y |
— |

Note:
Although the library considers 0.0 to be equal to -0.0, `atan2(0.0, 0.0)` isn't equal to
`atan2(0.0, -0.0)`.

These functions raise FE_INEXACT if the FPU reports that the result can't be exactly represented as a floating-point number.

#include <stdio.h> #include <math.h> #include <fenv.h> #include <stdlib.h> int main( void ) { int except_flags; feclearexcept(FE_ALL_EXCEPT); printf( "%f\n", atan2( .5, 1. ) ); except_flags = fetestexcept(FE_ALL_EXCEPT); if(except_flags) { /* An error occurred; handle it appropriately. */ } return EXIT_SUCCESS; }

produces the output:

0.463648

Safety: | |
---|---|

Cancellation point | No |

Interrupt handler | No |

Signal handler | No |

Thread | Yes |