diff --git a/src/c/numbers/atan.d b/src/c/numbers/atan.d index 5b07f99a7..bfcd008cd 100644 --- a/src/c/numbers/atan.d +++ b/src/c/numbers/atan.d @@ -22,17 +22,7 @@ static double ecl_atan2_double(double y, double x) { - if (x == 0) { - if (signbit(y)) { - return -ECL_PI2_D; - } else if (y == 0) { - /* Signals floating-point-invalid-operation. If not trapped, - produces NaN. */ - return x / y; - } else { - return ECL_PI2_D; - } - } else if (signbit(x)) { + if (signbit(x)) { if (signbit(y)) { return -ECL_PI_D + atan(-y / -x); } else if (y == 0) { @@ -40,6 +30,14 @@ ecl_atan2_double(double y, double x) } else { return ECL_PI_D - atan(y / -x); } + } else if (x == 0) { + if (signbit(y)) { + return -ECL_PI2_D; + } else if (y == 0) { + return x / y; /* Produces a NaN */ + } else { + return ECL_PI2_D; + } } else { if (signbit(y)) { return -atan(-y / x); @@ -55,18 +53,7 @@ ecl_atan2_double(double y, double x) static long double ecl_atan2_long_double(long double y, long double x) { - if (x == 0) { - if (signbit(y)) { - return -ECL_PI2_L; - } else if (y == 0) { - /* Signals floating-point-invalid-operation. If not trapped, - produces NaN. */ - return x / y; - } else { - return ECL_PI2_L; - } - } - else if (signbit(x)) { + if (signbit(x)) { if (signbit(y)) { return -ECL_PI_L + atanl(-y / -x); } else if (y == 0) { @@ -74,6 +61,14 @@ ecl_atan2_long_double(long double y, long double x) } else { return ECL_PI_L - atanl(y / -x); } + } else if (x == 0) { + if (signbit(y)) { + return -ECL_PI2_L; + } else if (y == 0) { + return x / y; /* Produces a NaN */ + } else { + return ECL_PI2_L; + } } else { if (signbit(y)) { return -atanl(-y / x);