Method: Math.atan2
- Defined in:
- math.c
.atan2(y, x) ⇒ Float
Computes the arc tangent given y and x. Returns a Float in the range -PI..PI.
Domain: (-INFINITY, INFINITY)
Codomain: [-PI, PI]
Math.atan2(-0.0, -1.0) #=> -3.141592653589793
Math.atan2(-1.0, -1.0) #=> -2.356194490192345
Math.atan2(-1.0, 0.0) #=> -1.5707963267948966
Math.atan2(-1.0, 1.0) #=> -0.7853981633974483
Math.atan2(-0.0, 1.0) #=> -0.0
Math.atan2(0.0, 1.0) #=> 0.0
Math.atan2(1.0, 1.0) #=> 0.7853981633974483
Math.atan2(1.0, 0.0) #=> 1.5707963267948966
Math.atan2(1.0, -1.0) #=> 2.356194490192345
Math.atan2(0.0, -1.0) #=> 3.141592653589793
Math.atan2(INFINITY, INFINITY) #=> 0.7853981633974483
Math.atan2(INFINITY, -INFINITY) #=> 2.356194490192345
Math.atan2(-INFINITY, INFINITY) #=> -0.7853981633974483
Math.atan2(-INFINITY, -INFINITY) #=> -2.356194490192345
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'math.c', line 64
static VALUE
math_atan2(VALUE obj, VALUE y, VALUE x)
{
#ifndef M_PI
# define M_PI 3.14159265358979323846
#endif
double dx, dy;
Need_Float2(y, x);
dx = RFLOAT_VALUE(x);
dy = RFLOAT_VALUE(y);
if (dx == 0.0 && dy == 0.0) {
if (!signbit(dx))
return DBL2NUM(dy);
if (!signbit(dy))
return DBL2NUM(M_PI);
return DBL2NUM(-M_PI);
}
#ifndef ATAN2_INF_C99
if (isinf(dx) && isinf(dy)) {
/* optimization for FLONUM */
if (dx < 0.0) {
const double dz = (3.0 * M_PI / 4.0);
return (dy < 0.0) ? DBL2NUM(-dz) : DBL2NUM(dz);
}
else {
const double dz = (M_PI / 4.0);
return (dy < 0.0) ? DBL2NUM(-dz) : DBL2NUM(dz);
}
}
#endif
return DBL2NUM(atan2(dy, dx));
}
|