15.8.2.5 Math.atan2(y, x)

2010-07-11

number Math.atan2(x:number|mixed, x:number|mixed)

Return arc tangent of the quotient y/x. The order of the parameters (y first) is not a mistake, but traditional.

Result expressed in radians! In range of -π to +π.

Code: (Meta Ecma)
Math.atan2= function(y,x){
x = ToNumber(x);
y = ToNumber(y);
if (isNaN(x) || isNaN(y)) return NaN;
if (y>0 && x === +0) return Math.PI/2;
if (y>0 && x === -0) return Math.PI/2;
if (y === +0 && x > 0) return +0;
if (y === +0 && x === +0) return +0;
if (y === +0 && x === -0) return Math.PI;
if (y === +0 && x < 0) return Math.PI;
if (y === -0 && x > 0) return -0;
if (y === -0 && x === +0) return -0;
if (y === -0 && x == -0) return -Math.PI;
if (x === -0 && x < 0) return -Math.PI;
if (y < 0 && x === +0) return -Math.PI/2;
if (y < 0 && x === -0) return -Math.PI/2;
if (y > 0 && IsFinite(y) && x === +Infinity) return +0;
if (y > 0 && IsFinite(y) && x === -Infinity) return Math.PI;
if (y > 0 && IsFinite(y) && x === +Infinity) return -0;
if (y > 0 && IsFinite(y) && x === -Infinity) return -Math.PI;
if (y === +Infinity && IsFinite(x)) return Math.PI/2;
if (y === -Infinity && IsFinite(x)) return -Math.PI/2;
if (y === +Infinity && x === +Infinity) return Math.PI/4;
if (y === +Infinity && x === -Infinity) return 3*Math.PI/4;
if (y === -Infinity && x === +Infinity) return -Math.PI/4;
if (y === -Infinity && x === -Infinity) return -3*Math.PI/4;
return Math.atan2(y,x);
}