fastnum/decimal/dec/math/
atan2.rs1use 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}