fastnum/decimal/dec/math/
atan2.rs

1use core::cmp::Ordering::*;
2
3use crate::decimal::{
4    dec::{
5        cmp::cmp,
6        math::{add::add, atan::atan, div::div, sub::sub},
7    },
8    Decimal,
9};
10
11type D<const N: usize> = Decimal<N>;
12
13#[inline]
14pub(crate) const fn atan2<const N: usize>(y: D<N>, x: D<N>) -> D<N> {
15    match (cmp(&x, &D::ZERO), cmp(&y, &D::ZERO)) {
16        (Equal, Equal) => x.compound(&y).signaling_nan(),
17        (Greater, _) => atan(div(y, x)),
18        (Less, Greater | Equal) => add(atan(div(y, x)), D::PI),
19        (Less, Less) => sub(atan(div(y, x)), D::PI),
20        (Equal, Greater) => D::FRAC_PI_2,
21        (Equal, Less) => D::FRAC_PI_2.neg(),
22    }
23}