diff --git a/libc/math/lib_atan2.c b/libc/math/lib_atan2.c index f78484d3998..5f4a6bff040 100644 --- a/libc/math/lib_atan2.c +++ b/libc/math/lib_atan2.c @@ -41,46 +41,32 @@ #ifdef CONFIG_HAVE_DOUBLE double atan2(double y, double x) { - if (y == 0.0) + if (x > 0) { - if (x >= 0.0) + return atan(y / x); + } + else if (y >= 0 && x < 0) + { + return atan(y / x) + M_PI; + } + else if (y < 0) + { + if (x == 0) { - return 0.0; + return -M_PI_2; } - else + else /* Can only be x < 0 */ { - return M_PI; + return atan(y / x) - M_PI; } } - else if (y > 0.0) + else if (y > 0 && x == 0) { - if (x == 0.0) - { - return M_PI_2; - } - else if (x > 0.0) - { - return atan(y / x); - } - else - { - return M_PI - atan(y / x); - } + return M_PI_2; } - else + else if (y == 0 && x == 0) /* Undefined but returns normally 0 */ { - if (x == 0.0) - { - return M_PI + M_PI_2; - } - else if (x > 0.0) - { - return 2 * M_PI - atan(y / x); - } - else - { - return M_PI + atan(y / x); - } + return 0; } } #endif diff --git a/libc/math/lib_atan2f.c b/libc/math/lib_atan2f.c index f3a92ff533f..999edd6ee30 100644 --- a/libc/math/lib_atan2f.c +++ b/libc/math/lib_atan2f.c @@ -37,45 +37,31 @@ float atan2f(float y, float x) { - if (y == 0.0) + if (x > 0) { - if (x >= 0.0) + return atanf(y / x); + } + else if (y >= 0 && x < 0) + { + return atanf(y / x) + M_PI; + } + else if (y < 0) + { + if (x == 0) { - return 0.0; + return -M_PI_2; } - else + else /* Can only be x < 0 */ { - return M_PI; + return atanf(y / x) - M_PI; } } - else if (y > 0.0) + else if (y > 0 && x == 0) { - if (x == 0.0) - { - return M_PI_2; - } - else if (x > 0.0) - { - return atanf(y / x); - } - else - { - return M_PI - atanf(y / x); - } + return M_PI_2; } - else + else if (y == 0 && x == 0) /* Undefined but returns normally 0 */ { - if (x == 0.0) - { - return M_PI + M_PI_2; - } - else if (x > 0.0) - { - return 2 * M_PI - atanf(y / x); - } - else - { - return M_PI + atanf(y / x); - } + return 0; } } diff --git a/libc/math/lib_atan2l.c b/libc/math/lib_atan2l.c index e2a576e5883..1946a3f040e 100644 --- a/libc/math/lib_atan2l.c +++ b/libc/math/lib_atan2l.c @@ -41,47 +41,32 @@ #ifdef CONFIG_HAVE_LONG_DOUBLE long double atan2l(long double y, long double x) { - - if (y == 0.0) + if (x > 0) { - if (x >= 0.0) + return atanl(y / x); + } + else if (y >= 0 && x < 0) + { + return atanl(y / x) + M_PI; + } + else if (y < 0) + { + if (x == 0) { - return 0.0; + return -M_PI_2; } - else + else /* Can only be x < 0 */ { - return M_PI; + return atanl(y / x) - M_PI; } } - else if (y > 0.0) + else if (y > 0 && x == 0) { - if (x == 0.0) - { - return M_PI_2; - } - else if (x > 0.0) - { - return atanl(y / x); - } - else - { - return M_PI - atanl(y / x); - } + return M_PI_2; } - else + else if (y == 0 && x == 0) /* Undefined but returns normally 0 */ { - if (x == 0.0) - { - return M_PI + M_PI_2; - } - else if (x > 0.0) - { - return 2 * M_PI - atanl(y / x); - } - else - { - return M_PI + atanl(y / x); - } + return 0; } } #endif