{"ScriptPreparationCode":"const ONEQTR_PI = Math.PI / 4;\r\nconst THRQTR_PI = (3 * Math.PI) / 4;\r\n\r\n// https://gist.github.com/volkansalma/2972237#file-atan2_approximation-c-L29\r\nconst fastAtan2 = (y, x) =\u003E {\r\n\tconst abs_y = Math.abs(y) \u002B 1e-10; // kludge to prevent 0/0 condition\r\n\tlet angle, r;\r\n\tif (x \u003C 0) {\r\n\t\tr = (x \u002B abs_y) / (abs_y - x);\r\n\t\tangle = THRQTR_PI;\r\n\t} else {\r\n\t\tr = (x - abs_y) / (x \u002B abs_y);\r\n\t\tangle = ONEQTR_PI;\r\n\t}\r\n\tangle \u002B= (0.1963 * r * r - 0.9817) * r;\r\n\treturn y \u003C 0 ? -angle : angle;\r\n};\r\nvar atan2 = Math.atan2;","TestCases":[{"Name":"Math.atan2","Code":"eval(\u0027\u0027);\r\nvar k = [1, .23, 0.12, 929, 8172, 9.2, 21.2].map(e =\u003E Math.atan2(e, .5));","IsDeferred":false},{"Name":"fast approx. atan2","Code":"eval(\u0027\u0027);\r\nvar k = [1, .23, 0.12, 929, 8172, 9.2, 21.2].map(e =\u003E fastAtan2(e, .5));","IsDeferred":false},{"Name":"cached Math.atan2","Code":"eval(\u0027\u0027);\r\nvar k = [1, .23, 0.12, 929, 8172, 9.2, 21.2].map(e =\u003E atan2(e, .5));","IsDeferred":false}]}