Expand/Shrink

[arc] sin / cos / tan / PI

Definition: atom res = sin(atom a)
-- or --
atom res = cos(atom a)
-- or --
atom res = tan(atom a)
-- or --
atom a = arcsin(atom x)
-- or --
atom a = arccos(atom x)
-- or --
atom a = arctan(atom x)
-- or --
atom a = atan2(atom y, x)
Description: sin/cos/tan(a) return the the sine/cosine/tangent of a, where a is in radians.
arcsin/arccos/arctan(x) return an angle with sine/cosine/tangent equal to x.
atan2() returns the arctangent of a ratio, equivalent to arctan(y/x) but can handle a zero denominator and is more accurate.
pwa/p2js: Supported.
Comments: The argument to arcsin and arccos, x, must be in the range -1 to +1 inclusive.
For arcsin and arctan, a value between -PI/2 and +PI/2 (radians) will be returned.
For arccos, a value between 0 and PI (radians) will be returned.
Multiply radians by XPG_RAD2DEG (defined in xpGUI as 180/PI) to convert to degrees.
arcsin() and arccos() are not as fast as arctan().

These functions may be applied to an atom or sq_sin() / sq_cos() / sq_tan() / sq_arcsin() / srccos() / sq_arctan() to all elements of a sequence. The rules for sequence operations apply.

Note that the following diagram uses degrees, so eg sin(30*XPG_DEG2RAD) = 0.5, where XPG_DEG2RAD is defined in xpGUI as PI/180.

Example:
?sin(0.9)   -- prints 0.7833269096
?cos(0.5)   -- prints 0.8775825619
?tan(0.1)   -- prints 0.1003346721
?arctan(2)  -- prints 1.107148718
?atan2(1,0) -- prints 1.570796327
?arcsin(1)  -- prints 1.570796327
?arccos(-1) -- prints 3.141592654
?PI         -- prints 3.141592654
Implementation: via :%opSin, :%opCos, :%opTan, and :%opArcTan in builtins\VM\pTrig.e (an autoinclude)
See builtins\misc.e (an autoinclude) for the implementations of arcsin(), arccos(), and atan2().
The constant PI is defined in psym.e/syminit(), part of the compiler, as 3.141592653589793238, the last two digits of which are of course irrelevant on 32-bit. See mpfr_const_pi() should you require more accuracy.