Trigonometric functions: Difference between revisions

Added Easylang
m (→‎{{header|REXX}}: updated the .sinCos subroutine.)
(Added Easylang)
(112 intermediate revisions by 55 users not shown)
Line 1:
{{task|Arithmetic operations}}
[[Category:Mathematics]]
If your language has a library or built-in functions for trigonometry, show examples of sine, cosine, tangent, and their inverses using the same angle in radians and degrees. For the non-inverse functions, each radian/degree pair should use arguments that evaluate to the same angle (that is, it's not necessary to use the same angle for all three regular functions as long as the two sine calls use the same angle). For the inverse functions, use the same number and convert its answer to radians and degrees. If your language does not have trigonometric functions available or only has some available, write functions to calculate the functions based on any [[wp:List of trigonometric identities|known approximation or identity]].
 
;Task:
If your language has a library or built-in functions for trigonometry, show examples of:
::*   sine
::*   cosine
::*   tangent
::*   inverses   (of the above)
<br>using the same angle in radians and degrees.
 
For the non-inverse functions, &nbsp; each radian/degree pair should use arguments that evaluate to the same angle &nbsp; (that is, it's not necessary to use the same angle for all three regular functions as long as the two sine calls use the same angle).
 
For the inverse functions, &nbsp; use the same number and convert its answer to radians and degrees.
 
If your language does not have trigonometric functions available or only has some available, &nbsp; write functions to calculate the functions based on any &nbsp; [[wp:List of trigonometric identities|known approximation or identity]].
<br><br>
 
=={{header|11l}}==
{{trans|Python}}
 
<syntaxhighlight lang="11l">V rad = math:pi / 4
V deg = 45.0
print(‘Sine: ’sin(rad)‘ ’sin(radians(deg)))
print(‘Cosine: ’cos(rad)‘ ’cos(radians(deg)))
print(‘Tangent: ’tan(rad)‘ ’tan(radians(deg)))
V arcsine = asin(sin(rad))
print(‘Arcsine: ’arcsine‘ ’degrees(arcsine))
V arccosine = acos(cos(rad))
print(‘Arccosine: ’arccosine‘ ’degrees(arccosine))
V arctangent = atan(tan(rad))
print(‘Arctangent: ’arctangent‘ ’degrees(arctangent))</syntaxhighlight>
 
{{out}}
<pre>
Sine: 0.707106781 0.707106781
Cosine: 0.707106781 0.707106781
Tangent: 1 1
Arcsine: 0.785398163 45
Arccosine: 0.785398163 45
Arctangent: 0.785398163 45
</pre>
 
=={{header|ACL2}}==
Line 6 ⟶ 46:
(This doesn't have the inverse functions; the Taylor series for those take too long to converge.)
 
<langsyntaxhighlight Lisplang="lisp">(defun fac (n)
(if (zp n)
1
Line 84 ⟶ 124:
(cw "~%tangent of pi / 4 radians: ")
(cw (as-decimal-str (tangent (/ *pi-approx* 4)) 20))
(cw "~%")))</langsyntaxhighlight>
 
<pre>sine of pi / 4 radians: 0.70710678118654752440
Line 93 ⟶ 133:
=={{header|ActionScript}}==
Actionscript supports basic trigonometric and inverse trigonometric functions via the Math class, including the atan2 function, but not the hyperbolic functions.
<langsyntaxhighlight ActionScriptlang="actionscript">trace("Radians:");
trace("sin(Pi/4) = ", Math.sin(Math.PI/4));
trace("cos(Pi/4) = ", Math.cos(Math.PI/4));
Line 109 ⟶ 149:
trace("arctan(0.5) = ", Math.atan(0.5)*180/Math.PI);
trace("arctan2(-1,-2) = ", Math.atan2(-1,-2)*180/Math.PI);
</syntaxhighlight>
</lang>
 
=={{header|Ada}}==
Ada provides library trig functions which default to radians along with corresponding library functions for which the cycle can be specified. The examples below specify the cycle for degrees and for radians. The output of the inverse trig functions is in units of the specified cycle (degrees or radians).<br>
The examples below specify the cycle for degrees and for radians. <br>
<lang ada>with Ada.Numerics.Elementary_Functions;
The output of the inverse trig functions is in units of the specified cycle (degrees or radians).
<syntaxhighlight lang="ada">with Ada.Numerics.Elementary_Functions;
use Ada.Numerics.Elementary_Functions;
with Ada.Float_Text_Io; use Ada.Float_Text_Io;
Line 146 ⟶ 189:
Put (Arccot (X => Cot (Angle_Degrees, Degrees_Cycle)),
Arccot (X => Cot (Angle_Degrees, Degrees_Cycle)));
end Trig;</langsyntaxhighlight>
 
{{out}}
Output:
<pre>
0.70711 0.70711
Line 159 ⟶ 202:
45.00000 0.78540
</pre>
 
=={{header|ALGOL 68}}==
{{trans|C}}
Line 167 ⟶ 211:
 
{{works with|ELLA ALGOL 68|Any (with appropriate job cards) - tested with release 1.8.8d.fc9.i386}}
<langsyntaxhighlight lang="algol68">main:(
REAL pi = 4 * arc tan(1);
# Pi / 4 is 45 degrees. All answers should be the same. #
Line 188 ⟶ 232:
temp := arc tan(tan(radians));
print((temp, " ", temp * 180 / pi, new line))
)</langsyntaxhighlight>
{{out}}
Output:
<pre>
+.707106781186548e +0 +.707106781186548e +0
Line 198 ⟶ 242:
+.785398163397448e +0 +.450000000000000e +2
</pre>
 
=={{header|ALGOL W}}==
<syntaxhighlight lang="algolw">begin
% Algol W only supplies sin, cos and arctan as standard. We can define %
% arcsin, arccos and tan functions using these. The standard functions %
% use radians so we also provide versions that use degrees %
 
% convert degrees to radians %
real procedure toRadians( real value x ) ; pi * ( x / 180 );
% convert radians to degrees %
real procedure toDegrees( real value x ) ; 180 * ( x / pi );
% tan of an angle in radians %
real procedure tan( real value x ) ; sin( x ) / cos( x );
% arcsin in radians %
real procedure arcsin( real value x ) ; arctan( x / sqrt( 1 - ( x * x ) ) );
% arccos in radians %
real procedure arccos( real value x ) ; arctan( sqrt( 1 - ( x * x ) ) / x );
% sin of an angle in degrees %
real procedure sinD( real value x ) ; sin( toRadians( x ) );
% cos of an angle in degrees %
real procedure cosD( real value x ) ; cos( toRadians( x ) );
% tan of an angle in degrees %
real procedure tanD( real value x ) ; tan( toRadians( x ) );
% arctan in degrees %
real procedure arctanD( real value x ) ; toDegrees( arctan( x ) );
% arcsin in degrees %
real procedure arcsinD( real value x ) ; toDegrees( arcsin( x ) );
% arccos in degrees %
real procedure arccosD( real value x ) ; toDegrees( arccos( x ) );
 
 
% test the procedures %
begin
 
real piOver4, piOver3, oneOverRoot2, root3Over2;
piOver3 := pi / 3; piOver4 := pi / 4;
oneOverRoot2 := 1.0 / sqrt( 2 ); root3Over2 := sqrt( 3 ) / 2;
 
 
r_w := 12; r_d := 5; r_format := "A"; s_w := 0; % set output format %
 
write( "PI/4: ", piOver4, " 1/root(2): ", oneOverRoot2 );
write();
write( "sin 45 degrees: ", sinD( 45 ), " sin pi/4 radians: ", sin( piOver4 ) );
write( "cos 45 degrees: ", cosD( 45 ), " cos pi/4 radians: ", cos( piOver4 ) );
write( "tan 45 degrees: ", tanD( 45 ), " tan pi/4 radians: ", tan( piOver4 ) );
write();
write( "arcsin( sin( pi/4 radians ) ): ", arcsin( sin( piOver4 ) ) );
write( "arccos( cos( pi/4 radians ) ): ", arccos( cos( piOver4 ) ) );
write( "arctan( tan( pi/4 radians ) ): ", arctan( tan( piOver4 ) ) );
write();
write( "PI/3: ", piOver4, " root(3)/2: ", root3Over2 );
write();
write( "sin 60 degrees: ", sinD( 60 ), " sin pi/3 radians: ", sin( piOver3 ) );
write( "cos 60 degrees: ", cosD( 60 ), " cos pi/3 radians: ", cos( piOver3 ) );
write( "tan 60 degrees: ", tanD( 60 ), " tan pi/3 radians: ", tan( piOver3 ) );
write();
write( "arcsin( sin( 60 degrees ) ): ", arcsinD( sinD( 60 ) ) );
write( "arccos( cos( 60 degrees ) ): ", arccosD( cosD( 60 ) ) );
write( "arctan( tan( 60 degrees ) ): ", arctanD( tanD( 60 ) ) );
 
end
 
end.</syntaxhighlight>
{{out}}
<pre>
PI/4: 0.78539 1/root(2): 0.70710
 
sin 45 degrees: 0.70710 sin pi/4 radians: 0.70710
cos 45 degrees: 0.70710 cos pi/4 radians: 0.70710
tan 45 degrees: 1.00000 tan pi/4 radians: 1.00000
 
arcsin( sin( pi/4 radians ) ): 0.78539
arccos( cos( pi/4 radians ) ): 0.78539
arctan( tan( pi/4 radians ) ): 0.78539
 
PI/3: 0.78539 root(3)/2: 0.86602
 
sin 60 degrees: 0.86602 sin pi/3 radians: 0.86602
cos 60 degrees: 0.50000 cos pi/3 radians: 0.50000
tan 60 degrees: 1.73205 tan pi/3 radians: 1.73205
 
arcsin( sin( 60 degrees ) ): 60.00000
arccos( cos( 60 degrees ) ): 60.00000
arctan( tan( 60 degrees ) ): 60.00000
</pre>
 
=={{header|Arturo}}==
 
{{trans|C}}
 
<syntaxhighlight lang="rebol">pi: 4*atan 1.0
 
radians: pi/4
degrees: 45.0
 
print "sine"
print [sin radians, sin degrees*pi/180]
 
print "cosine"
print [cos radians, cos degrees*pi/180]
 
print "tangent"
print [tan radians, tan degrees*pi/180]
 
print "arcsine"
print [asin sin radians, (asin sin radians)*180/pi]
 
print "arccosine"
print [acos cos radians, (acos cos radians)*180/pi]
 
print "arctangent"
print [atan tan radians, (atan tan radians)*180/pi]</syntaxhighlight>
 
{{out}}
 
<pre>sine
0.7071067811865475 0.7071067811865475
cosine
0.7071067811865476 0.7071067811865476
tangent
0.9999999999999999 0.9999999999999999
arcsine
0.7853981633974482 44.99999999999999
arccosine
0.7853981633974483 45.0
arctangent
0.7853981633974483 45.0</pre>
 
 
=={{header|Asymptote}}==
<syntaxhighlight lang="asymptote">real pi = 4 * atan(1);
real radian = pi / 4.0;
real angulo = 45.0 * pi / 180;
 
write("Radians : ", radian);
write("Degrees : ", angulo / pi * 180);
write();
write("Sine : ", sin(radian), sin(angulo));
write("Cosine : ", cos(radian), cos(angulo));
write("Tangent : ", tan(radian), tan(angulo));
write();
real temp = asin(sin(radian));
write("Arc Sine : ", temp, temp * 180 / pi);
temp = acos(cos(radian));
write("Arc Cosine : ", temp, temp * 180 / pi);
temp = atan(tan(radian));
write("Arc Tangent : ", temp, temp * 180 / pi);</syntaxhighlight>
{{out}}
<pre>Radians : 0.785398163397448
Degrees : 45
 
Sine : 0.707106781186547 0.707106781186547
Cosine : 0.707106781186548 0.707106781186548
Tangent : 1 1
 
Arc Sine : 0.785398163397448 45
Arc Cosine : 0.785398163397448 45
Arc Tangent : 0.785398163397448 45</pre>
 
=={{header|AutoHotkey}}==
{{trans|C}}
<langsyntaxhighlight AutoHotkeylang="autohotkey">pi := 4 * atan(1)
radians := pi / 4
degrees := 45.0
Line 228 ⟶ 431:
0.785398 45.000000
0.785398 45.000000
*/</langsyntaxhighlight>
 
=={{header|Autolisp}}==
Autolisp provides <b>(sin x) (cos x) (tan x)</b> and <b>(atan x)</b>.
Function arguments are expressed in radians.
<syntaxhighlight lang="autolisp">
(defun rad_to_deg (rad)(* 180.0 (/ rad PI)))
(defun deg_to_rad (deg)(* PI (/ deg 180.0)))
 
(defun asin (x)
(cond
((and(> x -1.0)(< x 1.0)) (atan (/ x (sqrt (- 1.0 (* x x))))))
((= x -1.0) (* -1.0 (/ pi 2)))
((= x 1) (/ pi 2))
)
)
 
(defun acos (x)
(cond
((and(>= x -1.0)(<= x 1.0)) (-(* pi 0.5) (asin x)))
)
)
 
(list
(list "cos PI/6" (cos (/ pi 6)) "cos 30 deg" (cos (deg_to_rad 30)))
(list "sin PI/4" (sin (/ pi 4)) "sin 45 deg" (sin (deg_to_rad 45)))
(list "tan PI/3" (tan (/ pi 3))"tan 60 deg" (tan (deg_to_rad 60)))
(list "asin 1 rad" (asin 1.0) "asin 1 rad (deg)" (rad_to_deg (asin 1.0)))
(list "acos 1/2 rad" (acos (/ 1 2.0)) "acos 1/2 rad (deg)" (rad_to_deg (acos (/ 1 2.0))))
(list "atan pi/12" (atan (/ pi 12)) "atan 15 deg" (rad_to_deg(atan(deg_to_rad 15))))
)
</syntaxhighlight>
{{out}}
<pre>
(("cos PI/6 rad" 0.866025 "cos 30 deg" 0.866025)
("sin PI/4 rad" 0.707107 "sin 45 deg" 0.707107)
("tan PI/3 rad" 1.73205 " tan 60 deg" 1.73205)
("asin 1 rad" 1.57080 "asin 1 rad (deg)" 90.0000)
("acos 1/2 rad" 1.04720 "acos 1/2 rad" 60.0000)
("atan pi/12 rad" 0.256053 "atan 15 deg" 14.6707))
</pre>
 
=={{header|AWK}}==
Line 247 ⟶ 490:
<tt>atan2(y, x)</tt> actually computes the angle of the point ''(x, y)'', in the range ''[-pi, pi]''. When x > 0, this angle is the principle arctangent of ''y/x'', in the range ''(-pi/2, pi/2)''. The calculations for arcsine and arccosine use points on the unit circle at ''x<sup>2</sup> + y<sup>2</sup> = 1''. To calculate arcsine in the range ''[-pi/2, pi/2]'', we take the angle of points on the half-circle ''x = sqrt(1 - y<sup>2</sup>)''. To calculate arccosine in the range ''[0, pi]'', we take the angle of points on the half-circle ''y = sqrt(1 - x<sup>2</sup>)''.
 
<langsyntaxhighlight lang="awk"># tan(x) = tangent of x
function tan(x) {
return sin(x) / cos(x)
Line 286 ⟶ 529:
print " acos(-sqrt(2) / 2) =", acos(-sqrt(2) / 2) / degrees
print " atan(sqrt(3)) =", atan(sqrt(3)) / degrees
}</langsyntaxhighlight>
 
{{out}}
Output: <pre>Using radians:
<pre>Using radians:
sin(-pi / 6) = -0.5
cos(3 * pi / 4) = -0.707107
Line 302 ⟶ 546:
acos(-sqrt(2) / 2) = 135
atan(sqrt(3)) = 60</pre>
 
=={{header|Axe}}==
Axe implements sine, cosine, and inverse tangent natively. One period is [0, 256) and the results are [-127, 127] for maximum precision.
 
The inverse tangent takes dX and dY parameters, rather than a single argument. This is because it is most often used to calculate angles.
 
<syntaxhighlight lang="axe">Disp sin(43)▶Dec,i
Disp cos(43)▶Dec,i
Disp tan⁻¹(10,10)▶Dec,i</syntaxhighlight>
 
{{out}}
<pre> 113
68
32</pre>
 
Below is the worked out math.
 
On a period of 256, an argument of 43 is equivalent to <math>\frac{\pi}{3} * \frac{128}{\pi}</math>.
 
Furthermore, <math>127*\frac{\sqrt{3}}{2} \approx 111</math> and <math>127*\frac{1}{2} \approx 64</math>.
 
So <math>\sin{43} \approx 113</math> and <math>\cos{43} \approx 68</math>. Axe uses approximations to calculate the trigonometric functions.
 
dX and dY values of 10 mean that the angle between them should be <math>\frac{\pi}{4}</math>. Indeed, the result <math>\tan^{-1}{(10, 10)} = 32 = \frac{128}{4}</math>.
 
=={{header|BaCon}}==
<syntaxhighlight lang="qbasic">' Trigonometric functions in BaCon use Radians for input values
' The RAD() function converts from degrees to radians
 
FOR v$ IN "0, 10, 45, 90, 190.5"
d = VAL(v$) * 1.0
r = RAD(d) * 1.0
 
PRINT "Sine: ", d, " degrees (or ", r, " radians) is ", SIN(r)
PRINT "Cosine: ", d, " degrees (or ", r, " radians) is ", COS(r)
PRINT "Tangent: ", d, " degrees (or ", r, " radians) is ", TAN(r)
PRINT
PRINT "Arc Sine: ", SIN(r), " is ", DEG(ASIN(SIN(r))), " degrees (or ", ASIN(SIN(r)), " radians)"
PRINT "Arc CoSine: ", COS(r), " is ", DEG(ACOS(COS(r))), " degrees (or ", ACOS(COS(r)), " radians)"
PRINT "Arc Tangent: ", TAN(r), " is ", DEG(ATN(TAN(r))), " degrees (or ", ATN(TAN(r)), " radians)"
PRINT
NEXT</syntaxhighlight>
 
{{out}}
<pre>prompt$ bacon -q trigonometric-functions.bac
...
Done, program 'trigonometric-functions' ready.
 
prompt$ ./trigonometric-functions
Sine: 0 degrees (or 0 radians) is 0
Cosine: 0 degrees (or 0 radians) is 1
Tangent: 0 degrees (or 0 radians) is 0
 
Arc Sine: 0 is 0 degrees (or 0 radians)
Arc CoSine: 1 is 0 degrees (or 0 radians)
Arc Tangent: 0 is 0 degrees (or 0 radians)
 
Sine: 10 degrees (or 0.174533 radians) is 0.173648
Cosine: 10 degrees (or 0.174533 radians) is 0.984808
Tangent: 10 degrees (or 0.174533 radians) is 0.176327
 
Arc Sine: 0.173648 is 10 degrees (or 0.174533 radians)
Arc CoSine: 0.984808 is 10 degrees (or 0.174533 radians)
Arc Tangent: 0.176327 is 10 degrees (or 0.174533 radians)
 
Sine: 45 degrees (or 0.785398 radians) is 0.707107
Cosine: 45 degrees (or 0.785398 radians) is 0.707107
Tangent: 45 degrees (or 0.785398 radians) is 1
 
Arc Sine: 0.707107 is 45 degrees (or 0.785398 radians)
Arc CoSine: 0.707107 is 45 degrees (or 0.785398 radians)
Arc Tangent: 1 is 45 degrees (or 0.785398 radians)
 
Sine: 90 degrees (or 1.5708 radians) is 1
Cosine: 90 degrees (or 1.5708 radians) is 6.12323e-17
Tangent: 90 degrees (or 1.5708 radians) is 16331239353195370
 
Arc Sine: 1 is 90 degrees (or 1.5708 radians)
Arc CoSine: 6.12323e-17 is 90 degrees (or 1.5708 radians)
Arc Tangent: 16331239353195370 is 90 degrees (or 1.5708 radians)
 
Sine: 190.5 degrees (or 3.32485 radians) is -0.182236
Cosine: 190.5 degrees (or 3.32485 radians) is -0.983255
Tangent: 190.5 degrees (or 3.32485 radians) is 0.185339
 
Arc Sine: -0.182236 is -10.5 degrees (or -0.18326 radians)
Arc CoSine: -0.983255 is 169.5 degrees (or 2.95833 radians)
Arc Tangent: 0.185339 is 10.5 degrees (or 0.18326 radians)</pre>
 
=={{header|BASIC}}==
{{works with|QuickBasic|4.5}}
QuickBasic 4.5 does not have arcsin and arccos built in. They are defined by identities found [[wp:Arctan#Relationships_among_the_inverse_trigonometric_functions|here]].
<langsyntaxhighlight lang="qbasic">pi = 3.141592653589793#
radians = pi / 4 'a.k.a. 45 degrees
degrees = 45 * pi / 180 'convert 45 degrees to radians once
Line 320 ⟶ 652:
arccos = 2 * ATN(SQR(1 - thecos ^ 2) / (1 + thecos))
PRINT arccos + " " + arccos * 180 / pi
PRINT ATN(TAN(radians)) + " " + ATN(TAN(radians)) * 180 / pi 'arctan</langsyntaxhighlight>
 
==={{header|BBCApplesoft BASIC}}===
The arcsine and arccoscine functions, while not intrinsic to Applesoft BASIC, are
<lang bbcbasic> @% = &90F : REM set column width
calculated using the existing BASIC functions and implemented as FN ASN and FN ACS
using the DEF FN function.
<syntaxhighlight lang="gwbasic"> 100 TAU = 8 * ATN (1)
110 RAD = TAU / 8
120 DEG = 45.0
130 DEF FN RAD(DEG) = DEG * TAU / 360
140 DEF FN DEG(RAD) = RAD / TAU * 360
150 DEF FN ASN(RAD) = ATN (RAD / SQR ( - RAD * RAD + 1))
160 DEF FN ACS(RAD) = - ATN (RAD / SQR ( - RAD * RAD + 1)) + TAU / 4
170 PRINT " SINE: " SIN (RAD);: HTAB (25): PRINT SIN ( FN RAD(DEG))
180 PRINT " COSINE: " COS (RAD);: HTAB (25): PRINT COS ( FN RAD(DEG))
190 PRINT " TANGENT: " TAN (RAD);: HTAB (25): PRINT TAN ( FN RAD(DEG))
200 ARC = FN ASN( SIN (RAD))
210 PRINT " ARCSINE: "ARC;: HTAB (25): PRINT FN DEG(ARC)
220 ARC = FN ACS( COS (RAD))
230 PRINT " ARCCOSINE: "ARC;: HTAB (25): PRINT FN DEG(ARC)
240 ARC = ATN ( TAN (RAD))
250 PRINT " ARCTANGENT: "ARC;: HTAB (25): PRINT FN DEG(ARC);</syntaxhighlight>
{{out}}
<pre>
SINE: .707106781 .707106781
COSINE: .707106781 .707106781
TANGENT: 1 1
ARCSINE: .785398163 45
ARCCOSINE: .785398164 45.0000001
ARCTANGENT: .785398163 45
</pre>
==={{header|BASIC256}}===
<syntaxhighlight lang="basic256">radian = pi / 4
angulo = 45.0 * pi / 180
 
print "Radians : "; radians(angulo); " ";
print "Degrees : "; degrees(radian)
print
print "Sine : "; sin(radian); " "; sin(angulo)
print "Cosine : "; cos(radian); " "; cos(angulo)
print "Tangent : "; tan(radian); " "; tan(angulo)
print
#temp = asin(sin(radians(angulo)))
temp = asin(sin(radian))
print "Arc Sine : "; temp; " "; degrees(temp)
temp = acos(cos(radian))
print "Arc Cosine : "; temp; " "; degrees(temp)
temp = atan(tan(radian))
print "Arc Tangent : "; temp; " "; degrees(temp)
end</syntaxhighlight>
 
==={{header|BBC BASIC}}===
<syntaxhighlight lang="bbcbasic"> @% = &90F : REM set column width
angle_radians = PI/5
Line 336 ⟶ 717:
PRINT ASN(number), DEG(ASN(number))
PRINT ACS(number), DEG(ACS(number))
PRINT ATN(number), DEG(ATN(number))</langsyntaxhighlight>
 
==={{header|IS-BASIC}}===
<syntaxhighlight lang="is-basic">100 LET DG=DEG(PI/4)
110 OPTION ANGLE DEGREES
120 PRINT SIN(DG)
130 PRINT COS(DG)
140 PRINT TAN(DG)
150 PRINT ASIN(SIN(DG))
160 PRINT ACOS(COS(DG))
170 PRINT ATN(TAN(DG))
180 LET RD=RAD(45)
190 OPTION ANGLE RADIANS
200 PRINT SIN(RD)
210 PRINT COS(RD)
220 PRINT TAN(RD)
230 PRINT ASIN(SIN(RD))
240 PRINT ACOS(COS(RD))
250 PRINT ATN(TAN(RD))</syntaxhighlight>
 
==={{header|Yabasic}}===
<syntaxhighlight lang="yabasic">radians = pi / 4
degrees = 45.0 * pi / 180
tab$ = chr$(09)
 
print "Radians : ", radians, " ",
print "Degrees : ", degrees / pi * 180
print
print "Sine : ", sin(radians), tab$, sin(degrees)
print "Cosine : ", cos(radians), tab$, cos(degrees)
print "Tangent : ", tan(radians), tab$, tan(degrees)
print
temp = asin(sin(radians))
print "Arc Sine : ", temp, tab$, temp * 180 / pi
temp = acos(cos(radians))
print "Arc Cosine : ", temp, tab$, temp * 180 / pi
temp = atan(tan(radians))
print "Arc Tangent : ", temp, tab$, temp * 180 / pi
end</syntaxhighlight>
 
=={{header|bc}}==
{{libheader|bc -l}}
{{trans|AWK}}
<langsyntaxhighlight lang="bc">/* t(x) = tangent of x */
define t(x) {
return s(x) / c(x)
Line 395 ⟶ 814:
" atan(sqrt(3)) = "; a(sqrt(3)) / d
 
quit</langsyntaxhighlight>
 
{{out}}
Output: <pre>Using radians:
<pre>Using radians:
sin(-pi / 6) = -.49999999999999999999999999999999999999999999999999
cos(3 * pi / 4) = -.70710678118654752440084436210484903928483593768845
Line 411 ⟶ 831:
acos(-sqrt(2) / 2) = 135.00000000000000000000000000000000000000000000005500
atan(sqrt(3)) = 60.00000000000000000000000000000000000000000000002463</pre>
 
=={{header|BQN}}==
 
BQN has a system value <code>•math</code> which contains trigonometry functions. Inputs are given in radians. These functions can also be used with BQN's Inverse modifier (<code>⁼</code>) to get their respective defined inverses.
 
Some results may be inaccurate due to floating point issues.
 
The following is done in the BQN REPL:
<syntaxhighlight lang="bqn"> ⟨sin, cos, tan⟩ ← •math
Sin 0
0
Sin π÷2
1
Cos 0
1
Cos π÷2
6.123233995736766e¯17
Tan 0
0
Tan π÷2
16331239353195370
Sin⁼ 0
0
Sin⁼ 1
1.5707963267948966
Cos⁼ 1
0
Cos⁼ 0
1.5707963267948966
Tan⁼ 0
0
Tan⁼ ∞
1.5707963267948966</syntaxhighlight>
 
 
=={{header|C}}==
 
<langsyntaxhighlight lang="c">#include <math.h>
#include <stdio.h>
 
Line 440 ⟶ 894:
 
return 0;
}</langsyntaxhighlight>
 
{{out}}
Output:
<pre>
0.707107 0.707107
Line 451 ⟶ 905:
0.785398 45.000000
</pre>
 
=={{header|C sharp|C#}}==
<syntaxhighlight lang="csharp">using System;
 
namespace RosettaCode {
class Program {
static void Main(string[] args) {
Console.WriteLine("=== radians ===");
Console.WriteLine("sin (pi/3) = {0}", Math.Sin(Math.PI / 3));
Console.WriteLine("cos (pi/3) = {0}", Math.Cos(Math.PI / 3));
Console.WriteLine("tan (pi/3) = {0}", Math.Tan(Math.PI / 3));
Console.WriteLine("arcsin (1/2) = {0}", Math.Asin(0.5));
Console.WriteLine("arccos (1/2) = {0}", Math.Acos(0.5));
Console.WriteLine("arctan (1/2) = {0}", Math.Atan(0.5));
Console.WriteLine("");
Console.WriteLine("=== degrees ===");
Console.WriteLine("sin (60) = {0}", Math.Sin(60 * Math.PI / 180));
Console.WriteLine("cos (60) = {0}", Math.Cos(60 * Math.PI / 180));
Console.WriteLine("tan (60) = {0}", Math.Tan(60 * Math.PI / 180));
Console.WriteLine("arcsin (1/2) = {0}", Math.Asin(0.5) * 180/ Math.PI);
Console.WriteLine("arccos (1/2) = {0}", Math.Acos(0.5) * 180 / Math.PI);
Console.WriteLine("arctan (1/2) = {0}", Math.Atan(0.5) * 180 / Math.PI);
 
Console.ReadLine();
}
}
}</syntaxhighlight>
 
=={{header|C++}}==
<langsyntaxhighlight lang="cpp">#include <iostream>
#include <cmath>
 
Line 483 ⟶ 964:
 
return 0;
}</langsyntaxhighlight>
 
=={{header|C sharp|C#}}==
<lang csharp>using System;
 
namespace RosettaCode {
class Program {
static void Main(string[] args) {
Console.WriteLine("=== radians ===");
Console.WriteLine("sin (pi/3) = {0}", Math.Sin(Math.PI / 3));
Console.WriteLine("cos (pi/3) = {0}", Math.Cos(Math.PI / 3));
Console.WriteLine("tan (pi/3) = {0}", Math.Tan(Math.PI / 3));
Console.WriteLine("arcsin (1/2) = {0}", Math.Asin(0.5));
Console.WriteLine("arccos (1/2) = {0}", Math.Acos(0.5));
Console.WriteLine("arctan (1/2) = {0}", Math.Atan(0.5));
Console.WriteLine("");
Console.WriteLine("=== degrees ===");
Console.WriteLine("sin (60) = {0}", Math.Sin(60 * Math.PI / 180));
Console.WriteLine("cos (60) = {0}", Math.Cos(60 * Math.PI / 180));
Console.WriteLine("tan (60) = {0}", Math.Tan(60 * Math.PI / 180));
Console.WriteLine("arcsin (1/2) = {0}", Math.Asin(0.5) * 180/ Math.PI);
Console.WriteLine("arccos (1/2) = {0}", Math.Acos(0.5) * 180 / Math.PI);
Console.WriteLine("arctan (1/2) = {0}", Math.Atan(0.5) * 180 / Math.PI);
 
Console.ReadLine();
}
}
}</lang>
=={{header|Clojure}}==
 
{{trans|fortran}}
 
<langsyntaxhighlight lang="lisp">(ns user
(:require [clojure.contrib.generic.math-functions :as generic]))
 
Line 530 ⟶ 985:
(println (str (asin (sin radians) ) " " (* (asin (sin (* degrees dtor))) rtod)))
(println (str (acos (cos radians) ) " " (* (acos (cos (* degrees dtor))) rtod)))
(println (str (atan (tan radians) ) " " (* (atan (tan (* degrees dtor))) rtod)))</langsyntaxhighlight>
 
Output:{{out}} (matches that of Java)
0.7071067811865475 0.7071067811865475
0.7071067811865476 0.7071067811865476
Line 542 ⟶ 997:
=={{header|COBOL}}==
 
<langsyntaxhighlight lang="cobol"> IDENTIFICATION DIVISION.
PROGRAM-ID. Trig.
 
Line 580 ⟶ 1,035:
 
GOBACK
.</langsyntaxhighlight>
 
{{out}}
Output:
<pre>
Radians:
Line 601 ⟶ 1,056:
 
=={{header|Common Lisp}}==
<langsyntaxhighlight lang="lisp">(defun deg->rad (x) (* x (/ pi 180)))
(defun rad->deg (x) (* x (/ 180 pi)))
 
Line 616 ⟶ 1,071:
(rad->deg (acos 1/2))
(atan 15)
(rad->deg (atan 15))))</langsyntaxhighlight>
 
=={{header|D}}==
{{trans|C}}
<langsyntaxhighlight lang="d">void main() {
import std.stdio, std.math;
 
Line 640 ⟶ 1,095:
immutable real t3 = PI_4.tan.atan;
writefln("Arctangent: %.20f %.20f", t3, t3 * 180.0L / PI);
}</langsyntaxhighlight>
{{out}}
<pre>Reference: 0.7071067811865475244008
Line 651 ⟶ 1,106:
Arccosine: 0.78539816339744830961 45.00000000000000000000
Arctangent: 0.78539816339744830961 45.00000000000000000000</pre>
 
=={{header|Delphi}}==
{{works with|Delphi|6.0}}
{{libheader|SysUtils,StdCtrls}}
 
 
<syntaxhighlight lang="Delphi">
 
procedure ShowTrigFunctions(Memo: TMemo);
const AngleDeg = 45.0;
var AngleRad,ArcSine,ArcCosine,ArcTangent: double;
begin
AngleRad:=DegToRad(AngleDeg);
 
Memo.Lines.Add(Format('Angle: Degrees: %3.5f Radians: %3.6f',[AngleDeg,AngleRad]));
Memo.Lines.Add('-------------------------------------------------');
Memo.Lines.Add(Format('Sine: Degrees: %3.6f Radians: %3.6f',[sin(DegToRad(AngleDeg)),sin(AngleRad)]));
Memo.Lines.Add(Format('Cosine: Degrees: %3.6f Radians: %3.6f',[cos(DegToRad(AngleDeg)),cos(AngleRad)]));
Memo.Lines.Add(Format('Tangent: Degrees: %3.6f Radians: %3.6f',[tan(DegToRad(AngleDeg)),tan(AngleRad)]));
ArcSine:=ArcSin(Sin(AngleRad));
Memo.Lines.Add(Format('Arcsine: Degrees: %3.6f Radians: %3.6f',[DegToRad(ArcSine),ArcSine]));
ArcCosine:=ArcCos(cos(AngleRad));
Memo.Lines.Add(Format('Arccosine: Degrees: %3.6f Radians: %3.6f',[DegToRad(ArcCosine),ArcCosine]));
ArcTangent:=ArcTan(tan(AngleRad));
Memo.Lines.Add(Format('Arctangent: Degrees: %3.6f Radians: %3.6f',[DegToRad(ArcTangent),ArcTangent]));
end;
 
 
 
</syntaxhighlight>
{{out}}
<pre>
Angle: Degrees: 45.00000 Radians: 0.785398
-------------------------------------------------
Sine: Degrees: 0.707107 Radians: 0.707107
Cosine: Degrees: 0.707107 Radians: 0.707107
Tangent: Degrees: 1.000000 Radians: 1.000000
Arcsine: Degrees: 0.013708 Radians: 0.785398
Arccosine: Degrees: 0.013708 Radians: 0.785398
Arctangent: Degrees: 0.013708 Radians: 0.785398
 
Elapsed Time: 9.118 ms.
 
</pre>
 
 
=={{header|E}}==
 
{{trans|ALGOL 68}}
<langsyntaxhighlight lang="e">def pi := (-1.0).acos()
 
def radians := pi / 4.0
Line 670 ⟶ 1,170:
${def acos := radians.cos().acos()} ${r2d(acos)}
${def atan := radians.tan().atan()} ${r2d(atan)}
`)</langsyntaxhighlight>
 
{{out}}
Output:
0.7071067811865475 0.7071067811865475
0.7071067811865476 0.7071067811865476
Line 679 ⟶ 1,179:
0.7853981633974483 45.0
0.7853981633974483 45.0
 
=={{header|EasyLang}}==
<syntaxhighlight>
r = pi / 4
d = 45
#
func r2d r .
return r / pi * 180
.
func d2r d .
return d * pi / 180
.
#
numfmt 4 0
print sin d & " " & sin r2d r
print cos d & " " & cos r2d r
print tan d & " " & tan r2d r
print ""
h = asin sin d
print h & " " & d2r h
h = acos cos d
print h & " " & d2r h
h = atan tan d
print h & " " & d2r h
</syntaxhighlight>
 
{{out}}
<pre>
0.7071 0.7071
0.7071 0.7071
1.0000 1.0000
 
45.0000 0.7854
45 0.7854
45 0.7854
</pre>
 
=={{header|Elena}}==
{{trans|C++}}
ELENA 4.x:
<syntaxhighlight lang="elena">import system'math;
import extensions;
public program()
{
console.printLine("Radians:");
console.printLine("sin(π/3) = ",(Pi_value/3).sin());
console.printLine("cos(π/3) = ",(Pi_value/3).cos());
console.printLine("tan(π/3) = ",(Pi_value/3).tan());
console.printLine("arcsin(1/2) = ",0.5r.arcsin());
console.printLine("arccos(1/2) = ",0.5r.arccos());
console.printLine("arctan(1/2) = ",0.5r.arctan());
console.printLine();
console.printLine("Degrees:");
console.printLine("sin(60º) = ",60.0r.Radian.sin());
console.printLine("cos(60º) = ",60.0r.Radian.cos());
console.printLine("tan(60º) = ",60.0r.Radian.tan());
console.printLine("arcsin(1/2) = ",0.5r.arcsin().Degree,"º");
console.printLine("arccos(1/2) = ",0.5r.arccos().Degree,"º");
console.printLine("arctan(1/2) = ",0.5r.arctan().Degree,"º");
console.readChar()
}</syntaxhighlight>
 
=={{header|Elixir}}==
{{trans|Erlang}}
<syntaxhighlight lang="elixir">iex(61)> deg = 45
45
iex(62)> rad = :math.pi / 4
0.7853981633974483
iex(63)> :math.sin(deg * :math.pi / 180) == :math.sin(rad)
true
iex(64)> :math.cos(deg * :math.pi / 180) == :math.cos(rad)
true
iex(65)> :math.tan(deg * :math.pi / 180) == :math.tan(rad)
true
iex(66)> temp = :math.acos(:math.cos(rad))
0.7853981633974483
iex(67)> temp * 180 / :math.pi == deg
true
iex(68)> temp = :math.atan(:math.tan(rad))
0.7853981633974483
iex(69)> temp * 180 / :math.pi == deg
true</syntaxhighlight>
 
=={{header|Erlang}}==
{{trans|C}}
<langsyntaxhighlight lang="erlang">
Deg=45.
Rad=math:pi()/4.
 
math:sin(Deg * math:pi() / 180)==math:sin(Rad).
</syntaxhighlight>
</lang>
 
{{out}}
Output:
true
 
<langsyntaxhighlight lang="erlang">
math:cos(Deg * math:pi() / 180)==math:cos(Rad).
</syntaxhighlight>
</lang>
 
{{out}}
Output:
true
 
<langsyntaxhighlight lang="erlang">
math:tan(Deg * math:pi() / 180)==math:tan(Rad).
</syntaxhighlight>
</lang>
 
{{out}}
Output:
true
 
<langsyntaxhighlight lang="erlang">
Temp = math:acos(math:cos(Rad)).
Temp * 180 / math:pi()==Deg.
</syntaxhighlight>
</lang>
 
{{out}}
Output:
true
 
<langsyntaxhighlight lang="erlang">
Temp = math:atan(math:tan(Rad)).
Temp * 180 / math:pi()==Deg.
</syntaxhighlight>
</lang>
 
{{out}}
Output:
true
 
=={{header|Fantom}}==
 
Fantom's Float library includes all six trigonometric functions, which assume the number is in radians. Methods are provided to convert: toDegrees and toRadians.
 
<lang fantom>
class Main
{
public static Void main ()
{
Float r := Float.pi / 4
echo (r.sin)
echo (r.cos)
echo (r.tan)
echo (r.asin)
echo (r.acos)
echo (r.atan)
// and from degrees
echo (45.0f.toRadians.sin)
echo (45.0f.toRadians.cos)
echo (45.0f.toRadians.tan)
echo (45.0f.toRadians.asin)
echo (45.0f.toRadians.acos)
echo (45.0f.toRadians.atan)
}
}
</lang>
 
=={{header|Forth}}==
<lang forth>45e pi f* 180e f/ \ radians
 
cr fdup fsin f. \ also available: fsincos ( r -- sin cos )
cr fdup fcos f.
cr fdup ftan f.
cr fdup fasin f.
cr fdup facos f.
cr fatan f. \ also available: fatan2 ( r1 r2 -- atan[r1/r2] )</lang>
 
=={{header|Fortran}}==
Trigonometic functions expect arguments in radians so degrees require conversion
<lang fortran>PROGRAM Trig
 
REAL pi, dtor, rtod, radians, degrees
pi = 4.0 * ATAN(1.0)
dtor = pi / 180.0
rtod = 180.0 / pi
radians = pi / 4.0
degrees = 45.0
WRITE(*,*) SIN(radians), SIN(degrees*dtor)
WRITE(*,*) COS(radians), COS(degrees*dtor)
WRITE(*,*) TAN(radians), TAN(degrees*dtor)
WRITE(*,*) ASIN(SIN(radians)), ASIN(SIN(degrees*dtor))*rtod
WRITE(*,*) ACOS(COS(radians)), ACOS(COS(degrees*dtor))*rtod
WRITE(*,*) ATAN(TAN(radians)), ATAN(TAN(degrees*dtor))*rtod
 
END PROGRAM Trig</lang>
Output:
0.707107 0.707107
0.707107 0.707107
1.00000 1.00000
0.785398 45.0000
0.785398 45.0000
0.785398 45.0000
The following trigonometric functions are also available
<lang fortran>ATAN2(y,x) ! Arctangent(y/x), ''-pi < result <= +pi''
SINH(x) ! Hyperbolic sine
COSH(x) ! Hyperbolic cosine
TANH(x) ! Hyperbolic tangent</lang>
 
=={{header|F_Sharp|F#}}==
<langsyntaxhighlight lang="fsharp">open NUnit.Framework
open FsUnit
 
Line 914 ⟶ 1,429:
let c = System.Math.Cos (toRadians 45.0)
let s = System.Math.Sin (toRadians 45.0)
System.Math.Round(c,5) = System.Math.Round(s,5) |> should be True</langsyntaxhighlight>
 
=={{header|Factor}}==
<syntaxhighlight lang="factor">USING: kernel math math.constants math.functions math.trig
prettyprint ;
 
pi 4 / 45 deg>rad [ sin ] [ cos ] [ tan ]
[ [ . ] compose dup compose ] tri@ 2tri
 
.5 [ asin ] [ acos ] [ atan ] tri [ dup rad>deg [ . ] bi@ ] tri@</syntaxhighlight>
 
=={{header|Fantom}}==
 
Fantom's Float library includes all six trigonometric functions,
which assume the number is in radians. <br>
Methods are provided to convert: toDegrees and toRadians.
 
<syntaxhighlight lang="fantom">
class Main
{
public static Void main ()
{
Float r := Float.pi / 4
echo (r.sin)
echo (r.cos)
echo (r.tan)
echo (r.asin)
echo (r.acos)
echo (r.atan)
// and from degrees
echo (45.0f.toRadians.sin)
echo (45.0f.toRadians.cos)
echo (45.0f.toRadians.tan)
echo (45.0f.toRadians.asin)
echo (45.0f.toRadians.acos)
echo (45.0f.toRadians.atan)
}
}
</syntaxhighlight>
 
=={{header|Forth}}==
<syntaxhighlight lang="forth">45e pi f* 180e f/ \ radians
 
cr fdup fsin f. \ also available: fsincos ( r -- sin cos )
cr fdup fcos f.
cr fdup ftan f.
cr fdup fasin f.
cr fdup facos f.
cr fatan f. \ also available: fatan2 ( r1 r2 -- atan[r1/r2] )</syntaxhighlight>
 
=={{header|Fortran}}==
Trigonometic functions expect arguments in radians so degrees require conversion
<syntaxhighlight lang="fortran">PROGRAM Trig
 
REAL pi, dtor, rtod, radians, degrees
pi = 4.0 * ATAN(1.0)
dtor = pi / 180.0
rtod = 180.0 / pi
radians = pi / 4.0
degrees = 45.0
WRITE(*,*) SIN(radians), SIN(degrees*dtor)
WRITE(*,*) COS(radians), COS(degrees*dtor)
WRITE(*,*) TAN(radians), TAN(degrees*dtor)
WRITE(*,*) ASIN(SIN(radians)), ASIN(SIN(degrees*dtor))*rtod
WRITE(*,*) ACOS(COS(radians)), ACOS(COS(degrees*dtor))*rtod
WRITE(*,*) ATAN(TAN(radians)), ATAN(TAN(degrees*dtor))*rtod
 
END PROGRAM Trig</syntaxhighlight>
{{out}}
0.707107 0.707107
0.707107 0.707107
1.00000 1.00000
0.785398 45.0000
0.785398 45.0000
0.785398 45.0000
The following trigonometric functions are also available
<syntaxhighlight lang="fortran"> ATAN2(y,x) ! Arctangent(y/x), ''-pi < result <= +pi''
SINH(x) ! Hyperbolic sine
COSH(x) ! Hyperbolic cosine
TANH(x) ! Hyperbolic tangent</syntaxhighlight>
 
But, for those with access to fatter Fortran function libraries, trigonometrical functions working in degrees are also available.
<syntaxhighlight lang="fortran">
Calculate various trigonometric functions from the Fortran library.
INTEGER BIT(32),B,IP !Stuff for bit fiddling.
INTEGER ENUFF,I !Step through the test angles.
PARAMETER (ENUFF = 17) !A selection of special values.
INTEGER ANGLE(ENUFF) !All in whole degrees.
DATA ANGLE/0,30,45,60,90,120,135,150,180, !Here they are.
1 210,225,240,270,300,315,330,360/ !Thus check angle folding.
REAL PI,DEG2RAD !Special numbers.
REAL D,R,FD,FR,AD,AR !Degree, Radian, F(D), F(R), inverses.
PI = 4*ATAN(1.0) !SINGLE PRECISION 1·0.
DEG2RAD = PI/180 !Limited precision here too for a transcendental number.
Case the first: sines.
WRITE (6,10) ("Sin", I = 1,4) !Supply some names.
10 FORMAT (" Deg.",A7,"(Deg)",A7,"(Rad) Rad - Deg", !Ah, layout.
1 6X,"Arc",A3,"D",6X,"Arc",A3,"R",9X,"Diff")
DO I = 1,ENUFF !Step through the test values.
D = ANGLE(I) !The angle in degrees, in floating point.
R = D*DEG2RAD !Approximation, in radians.
FD = SIND(D); AD = ASIND(FD) !Functions working in degrees.
FR = SIN(R); AR = ASIN(FR)/DEG2RAD !Functions working in radians.
WRITE (6,11) INT(D),FD,FR,FR - FD,AD,AR,AR - AD !Results.
11 FORMAT (I4,":",3F12.8,3F13.7) !Ah, alignment with FORMAT 10...
END DO !On to the next test value.
Case the second: cosines.
WRITE (6,10) ("Cos", I = 1,4)
DO I = 1,ENUFF
D = ANGLE(I)
R = D*DEG2RAD
FD = COSD(D); AD = ACOSD(FD)
FR = COS(R); AR = ACOS(FR)/DEG2RAD
WRITE (6,11) INT(D),FD,FR,FR - FD,AD,AR,AR - AD
END DO
Case the third: tangents.
WRITE (6,10) ("Tan", I = 1,4)
DO I = 1,ENUFF
D = ANGLE(I)
R = D*DEG2RAD
FD = TAND(D); AD = ATAND(FD)
FR = TAN(R); AR = ATAN(FR)/DEG2RAD
WRITE (6,11) INT(D),FD,FR,FR - FD,AD,AR,AR - AD
END DO
WRITE (6,*) "...Special deal for 90 degrees..."
D = 90
R = D*DEG2RAD
FD = TAND(D); AD = ATAND(FD)
FR = TAN(R); AR = ATAN(FR)/DEG2RAD
WRITE (6,*) "TanD =",FD,"Atan =",AD
WRITE (6,*) "TanR =",FR,"Atan =",AR
Convert PI to binary...
PI = PI - 3 !I know it starts with three, and I need the fractional part.
BIT(1:2) = 1 !So, the binary is 11. something.
B = 2 !Two bits known.
DO I = 1,26 !For single precision, more than enough additional bits.
PI = PI*2 !Hoist a bit to the hot spot.
IP = PI !The integral part.
PI = PI - IP !Remove it from the work in progress.
B = B + 1 !Another bit bitten.
BIT(B) = IP !Place it.
END DO !On to the next.
WRITE (6,20) BIT(1:B) !Reveal the bits.
20 FORMAT (" Pi ~ ",2I1,".",66I1) !A known format.
WRITE (6,*) " = 11.00100100001111110110101010001000100001..." !But actually...
END !So much for that.
</syntaxhighlight>
Output:
Deg. Sin(Deg) Sin(Rad) Rad - Deg ArcSinD ArcSinR Diff
0: 0.00000000 0.00000000 0.00000000 0.0000000 0.0000000 0.0000000
30: 0.50000000 0.50000000 0.00000000 30.0000000 30.0000000 0.0000000
45: 0.70710677 0.70710677 0.00000000 45.0000000 45.0000000 0.0000000
60: 0.86602539 0.86602545 0.00000006 60.0000000 60.0000038 0.0000038
90: 1.00000000 1.00000000 0.00000000 90.0000000 90.0000000 0.0000000
120: 0.86602539 0.86602539 0.00000000 60.0000000 60.0000000 0.0000000
135: 0.70710677 0.70710677 0.00000000 45.0000000 45.0000000 0.0000000
150: 0.50000000 0.50000006 0.00000006 30.0000000 30.0000038 0.0000038
180: 0.00000000 -0.00000009 -0.00000009 0.0000000 -0.0000050 -0.0000050
210: -0.50000000 -0.49999997 0.00000003 -30.0000000 -29.9999981 0.0000019
225: -0.70710677 -0.70710671 0.00000006 -45.0000000 -44.9999962 0.0000038
240: -0.86602539 -0.86602545 -0.00000006 -60.0000000 -60.0000038 -0.0000038
270: -1.00000000 -1.00000000 0.00000000 -90.0000000 -90.0000000 0.0000000
300: -0.86602539 -0.86602545 -0.00000006 -60.0000000 -60.0000038 -0.0000038
315: -0.70710677 -0.70710689 -0.00000012 -45.0000000 -45.0000076 -0.0000076
330: -0.50000000 -0.50000018 -0.00000018 -30.0000000 -30.0000114 -0.0000114
360: 0.00000000 0.00000017 0.00000017 0.0000000 0.0000100 0.0000100
Deg. Cos(Deg) Cos(Rad) Rad - Deg ArcCosD ArcCosR Diff
0: 1.00000000 1.00000000 0.00000000 0.0000000 0.0000000 0.0000000
30: 0.86602539 0.86602539 0.00000000 30.0000019 30.0000019 0.0000000
45: 0.70710677 0.70710677 0.00000000 45.0000000 45.0000000 0.0000000
60: 0.50000000 0.49999997 -0.00000003 60.0000000 60.0000038 0.0000038
90: 0.00000000 -0.00000004 -0.00000004 90.0000000 90.0000000 0.0000000
120: -0.50000000 -0.50000006 -0.00000006 120.0000000 120.0000076 0.0000076
135: -0.70710677 -0.70710677 0.00000000 135.0000000 135.0000000 0.0000000
150: -0.86602539 -0.86602539 0.00000000 150.0000000 150.0000000 0.0000000
180: -1.00000000 -1.00000000 0.00000000 180.0000000 180.0000000 0.0000000
210: -0.86602539 -0.86602539 0.00000000 150.0000000 150.0000000 0.0000000
225: -0.70710677 -0.70710683 -0.00000006 135.0000000 135.0000000 0.0000000
240: -0.50000000 -0.49999991 0.00000009 120.0000000 119.9999924 -0.0000076
270: 0.00000000 0.00000001 0.00000001 90.0000000 90.0000000 0.0000000
300: 0.50000000 0.49999991 -0.00000009 60.0000000 60.0000076 0.0000076
315: 0.70710677 0.70710665 -0.00000012 45.0000000 45.0000114 0.0000114
330: 0.86602539 0.86602533 -0.00000006 30.0000019 30.0000095 0.0000076
360: 1.00000000 1.00000000 0.00000000 0.0000000 0.0000000 0.0000000
Deg. Tan(Deg) Tan(Rad) Rad - Deg ArcTanD ArcTanR Diff
0: 0.00000000 0.00000000 0.00000000 0.0000000 0.0000000 0.0000000
30: 0.57735026 0.57735026 0.00000000 30.0000000 30.0000000 0.0000000
45: 1.00000000 1.00000000 0.00000000 45.0000000 45.0000000 0.0000000
60: 1.73205078 1.73205090 0.00000012 60.0000000 60.0000000 0.0000000
90:************************************ 90.0000000 -90.0000000 -180.0000000
120: -1.73205078 -1.73205054 0.00000024 -60.0000000 -59.9999962 0.0000038
135: -1.00000000 -1.00000000 0.00000000 -45.0000000 -45.0000000 0.0000000
150: -0.57735026 -0.57735032 -0.00000006 -30.0000000 -30.0000019 -0.0000019
180: 0.00000000 0.00000009 0.00000009 0.0000000 0.0000050 0.0000050
210: 0.57735026 0.57735026 0.00000000 30.0000000 30.0000000 0.0000000
225: 1.00000000 0.99999988 -0.00000012 45.0000000 44.9999962 -0.0000038
240: 1.73205078 1.73205125 0.00000048 60.0000000 60.0000076 0.0000076
270:************************************ 90.0000000 -90.0000000 -180.0000000
300: -1.73205078 -1.73205113 -0.00000036 -60.0000000 -60.0000038 -0.0000038
315: -1.00000000 -1.00000024 -0.00000024 -45.0000000 -45.0000076 -0.0000076
330: -0.57735026 -0.57735056 -0.00000030 -30.0000000 -30.0000134 -0.0000134
360: 0.00000000 0.00000017 0.00000017 0.0000000 0.0000100 0.0000100
...Special deal for 90 degrees...
TanD = 1.6331778E+16 Atan = 90.00000
TanR = -2.2877332E+07 Atan = -90.00000
Pi ~ 11.00100100001111110110110000
= 11.00100100001111110110101010001000100001...
Notice that the calculations in radians are less accurate. Firstly, pi cannot be represented exactly and secondly, the conversion factor of pi/180 or 180/pi adds further to the error. The degree-based functions obviously can fold their angles using exact arithmetic (though ACosD has surprising trouble with 30°) and so 360° is the same as 0°, unlike the case with radians. TanD(90°) should yield Infinity (but, which sign?) but perhaps this latter-day feature of computer floating-point was not included. In any case, Tan(90° in radians) faces the problem that its parameter will not in fact be pi/2 but some value just over (or under), and likewise with double precision and quadruple precision and any other finite precision.
 
=={{header|FreeBASIC}}==
{{trans|C}}
<syntaxhighlight lang="freebasic">' FB 1.05.0 Win64
 
Const pi As Double = 4 * Atn(1)
Dim As Double radians = pi / 4
Dim As Double degrees = 45.0 '' equivalent in degrees
Dim As Double temp
 
Print "Radians : "; radians, " ";
Print "Degrees : "; degrees
Print
Print "Sine : "; Sin(radians), Sin(degrees * pi / 180)
Print "Cosine : "; Cos(radians), Cos(degrees * pi / 180)
Print "Tangent : "; Tan(radians), Tan(degrees * pi / 180)
Print
temp = ASin(Sin(radians))
Print "Arc Sine : "; temp, temp * 180 / pi
temp = ACos(Cos(radians))
Print "Arc Cosine : "; temp, temp * 180 / pi
temp = Atn(Tan(radians))
Print "Arc Tangent : "; temp, temp * 180 / pi
Sleep</syntaxhighlight>
 
{{out}}
<pre>
Radians : 0.7853981633974483 Degrees : 45
 
Sine : 0.7071067811865475 0.7071067811865475
Cosine : 0.7071067811865476 0.7071067811865476
Tangent : 0.9999999999999999 0.9999999999999999
 
Arc Sine : 0.7853981633974482 44.99999999999999
Arc Cosine : 0.7853981633974483 45
Arc Tangent : 0.7853981633974483 45
</pre>
 
=={{header|FutureBasic}}==
<syntaxhighlight lang="futurebasic">
include "NSLog.incl"
 
void local fn DoIt
double degrees = 45.0
double radians = degrees * M_PI / 180
NSLog(@"%f, %f",sin(radians),sin(degrees * M_PI / 180))
NSLog(@"%f, %f",cos(radians),cos(degrees * M_PI / 180))
NSLog(@"%f, %f",tan(radians),tan(degrees * M_PI / 180))
NSLog(@"%f, %f",asin(sin(radians)),asin(sin(radians)) * 180 / M_PI)
NSLog(@"%f, %f",acos(cos(radians)),acos(cos(radians)) * 180 / M_PI)
NSLog(@"%f, %f",atan(tan(radians)),atan(tan(radians)) * 180 / M_PI)
end fn
 
fn DoIt
 
HandleEvents
</syntaxhighlight>
 
{{out}}
<pre>
0.707107, 0.707107
0.707107, 0.707107
1.000000, 1.000000
0.785398, 45.000000
0.785398, 45.000000
0.785398, 45.000000
</pre>
 
=={{header|GAP}}==
<langsyntaxhighlight lang="gap"># GAP has an improved floating-point support since version 4.5
 
Pi := Acos(-1.0);
 
# Or use the built-in constant:
Pi := FLOAT.PI;
 
r := Pi / 5.0;
Line 931 ⟶ 1,727:
Cos(Deg(d)); Acos(last);
Tan(r); Atan(last);
Tan(Deg(d)); Atan(last);</langsyntaxhighlight>
 
=={{header|Go}}==
The Go math package provides the constant pi and the six trigonometric functions called for by the task. The functions all use the float64 type and work in radians. It also provides a [http://golang.org/pkg/math/#Sincos Sincos] function.
<langsyntaxhighlight lang="go">package main
 
import (
Line 962 ⟶ 1,758:
fmt.Printf("atan(%f) = %9.6f deg\n", t, math.Atan(t)*180/math.Pi)
fmt.Printf("atan(%f) = %9.6f rad\n", t, math.Atan(t))
}</langsyntaxhighlight>
{{out}}
Output:
<pre>
sin(30.000000 deg) = 0.500000
Line 981 ⟶ 1,777:
=={{header|Groovy}}==
Trig functions use radians, degrees must be converted to/from radians
<langsyntaxhighlight lang="groovy">def radians = Math.PI/4
def degrees = 45
 
Line 992 ⟶ 1,788:
println "asin(\u221A2/2) = ${Math.asin(2**(-0.5))} == asin(\u221A2/2)\u00B0 = ${r2d(Math.asin(2**(-0.5)))}\u00B0"
println "acos(\u221A2/2) = ${Math.acos(2**(-0.5))} == acos(\u221A2/2)\u00B0 = ${r2d(Math.acos(2**(-0.5)))}\u00B0"
println "atan(1) = ${Math.atan(1)} == atan(1)\u00B0 = ${r2d(Math.atan(1))}\u00B0"</langsyntaxhighlight>
 
{{out}}
Output:
<pre>sin(π/4) = 0.7071067811865475 == sin(45°) = 0.7071067811865475
cos(π/4) = 0.7071067811865476 == cos(45°) = 0.7071067811865476
Line 1,006 ⟶ 1,802:
Trigonometric functions use radians; degrees require conversion.
 
<langsyntaxhighlight lang="haskell">fromDegrees deg:: =Floating dega *=> pia / 180-> a
toDegreesfromDegrees raddeg = raddeg * 180pi / pi180
 
toDegrees :: Floating a => a -> a
example = [
toDegrees rad = rad * 180 / pi
sin (pi / 6), sin (fromDegrees 30),
 
cos (pi / 6), cos (fromDegrees 30),
main :: IO ()
tan (pi / 6), tan (fromDegrees 30),
main =
asin 0.5, toDegrees (asin 0.5),
mapM_
acos 0.5, toDegrees (acos 0.5),
print
atan 0.5, toDegrees (atan 0.5)]</lang>
[ sin (pi / 6)
, sin (fromDegrees 30)
, cos (pi / 6)
, cos (fromDegrees 30)
, tan (pi / 6)
, tan (fromDegrees 30)
, asin 0.5
, toDegrees (asin 0.5)
, acos 0.5
, toDegrees (acos 0.5)
, atan 0.5
, toDegrees (atan 0.5)
]</syntaxhighlight>
{{Out}}
<pre>0.49999999999999994
0.49999999999999994
0.8660254037844387
0.8660254037844387
0.5773502691896256
0.5773502691896256
0.5235987755982988
29.999999999999996
1.0471975511965976
59.99999999999999
0.46364760900080615
26.56505117707799</pre>
 
=={{header|HicEst}}==
Translated from Fortran:
<langsyntaxhighlight lang="hicest">pi = 4.0 * ATAN(1.0)
dtor = pi / 180.0
rtod = 180.0 / pi
Line 1,030 ⟶ 1,852:
WRITE(ClipBoard) ASIN(SIN(radians)), ASIN(SIN(degrees*dtor))*rtod
WRITE(ClipBoard) ACOS(COS(radians)), ACOS(COS(degrees*dtor))*rtod
WRITE(ClipBoard) ATAN(TAN(radians)), ATAN(TAN(degrees*dtor))*rtod</langsyntaxhighlight>
<langsyntaxhighlight lang="hicest">0.7071067812 0.7071067812
0.7071067812 0.7071067812
1 1
0.7853981634 45
0.7853981634 45
0.7853981634 45</langsyntaxhighlight>
SINH, COSH, TANH, and inverses are available as well.
 
=={{header|IDL}}==
 
<langsyntaxhighlight lang="idl">deg = 35 ; arbitrary number of degrees
rad = !dtor*deg ; system variables !dtor and !radeg convert between rad and deg</langsyntaxhighlight>
<langsyntaxhighlight lang="idl">; the trig functions receive and emit radians:
print, rad, sin(rad), asin(sin(rad))
print, cos(rad), acos(cos(rad))
Line 1,051 ⟶ 1,873:
; 0.610865 0.573576 0.610865
; 0.819152 0.610865
; 0.700208 0.610865</langsyntaxhighlight>
<langsyntaxhighlight lang="idl">; the hyperbolic versions exist and behave as expected:
print, sinh(rad) ; etc
 
; outputs
; 0.649572</langsyntaxhighlight>
<langsyntaxhighlight lang="idl">;If the input is an array, the output has the same dimensions etc as the input:
x = !dpi/[[2,3],[4,5],[6,7]] ; !dpi is a read-only sysvar = 3.1415...
print,sin(x)
Line 1,064 ⟶ 1,886:
; 1.0000000 0.86602540
; 0.70710678 0.58778525
; 0.50000000 0.43388374</langsyntaxhighlight>
<langsyntaxhighlight lang="idl">; the trig functions behave as expected for complex arguments:
x = complex(1,2)
print,sin(x)
 
; outputs
; ( 3.16578, 1.95960)</langsyntaxhighlight>
 
== Icon and Unicon ==
Icon and Unicon trig functions 'sin', 'cos', 'tan', 'asin', 'acos', and 'atan' operate on angles expressed in radians. Conversion functions 'dtor' and 'rtod' convert between the two systems. The example below uses string invocation to construct and call the functions:
==={{header|Icon}}===
<langsyntaxhighlight Iconlang="icon">invocable all
procedure main()
 
Line 1,082 ⟶ 1,904:
 
every write(f := !["sin","cos","tan"],"(",r,")=",y := f(r)," ",fi := "a" || f,"(",y,")=",x := fi(y)," rad = ",rtod(x)," deg")
end</langsyntaxhighlight>
{{out}}
Sample Output:<pre>sin(0.5235987755982988)=0.4999999999999999 asin(0.4999999999999999)=0.5235987755982988 rad = 30.0 deg
<pre>sin(0.5235987755982988)=0.4999999999999999 asin(0.4999999999999999)=0.5235987755982988 rad = 30.0 deg
cos(0.5235987755982988)=0.8660254037844387 acos(0.8660254037844387)=0.5235987755982987 rad = 29.99999999999999 deg
tan(0.5235987755982988)=0.5773502691896257 atan(0.5773502691896257)=0.5235987755982988 rad = 30.0 deg</pre>
 
==={{header|Unicon}}===
The Icon solution works in Unicon.
Line 1,093 ⟶ 1,917:
 
Sine, cosine, and tangent of a single angle, indicated as pi-over-four radians and as 45 degrees:
<langsyntaxhighlight lang="j"> >,:(1&o. ;, 2&o. ;,: 3&o.) (4 %~ o. 1) , 180 %~ o. 45</lang>
0.707107 0.707107
0.707107 0.707107
1 1</syntaxhighlight>
Arcsine, arccosine, and arctangent of one-half, in radians and degrees:
<langsyntaxhighlight lang="j"> >,:([ ,. 180p_1&*)&.> (_1&o. ;, _2&o. ;,: _3&o.) 0.5</lang>
0.523599 30
1.0472 60
0.463648 26.5651</syntaxhighlight>
 
The <code>trig</code> script adds cover functions for the trigonometric operations as well as verbs for converting degrees from radians (<code>dfr</code>) and radians from degrees (<code>rfd</code>)
<syntaxhighlight lang="j"> require 'trig'
(sin , cos ,: tan) (1p1 % 4), rfd 45
0.707107 0.707107
0.707107 0.707107
1 1
 
([ ,. dfr) (arcsin , arccos ,: arctan) 0.5
0.523599 30
1.0472 60
0.463648 26.5651</syntaxhighlight>
 
=={{header|Java}}==
Line 1,107 ⟶ 1,943:
Java's <tt>Math</tt> class contains all six functions and is automatically included as part of the language. The functions all accept radians only, so conversion is necessary when dealing with degrees. The <tt>Math</tt> class also has a <tt>PI</tt> constant for easy conversion.
 
<langsyntaxhighlight lang="java">public class Trig {
public static void main(String[] args) {
//Pi / 4 is 45 degrees. All answers should be the same.
Line 1,128 ⟶ 1,964:
System.out.println(arctan + " " + Math.toDegrees(arctan));
}
}</langsyntaxhighlight>
 
{{out}}
Output:
<pre>
0.7071067811865475 0.7071067811865475
Line 1,144 ⟶ 1,980:
JavaScript's <tt>Math</tt> class contains all six functions and is automatically included as part of the language. The functions all accept radians only, so conversion is necessary when dealing with degrees. The <tt>Math</tt> class also has a <tt>PI</tt> constant for easy conversion.
 
<langsyntaxhighlight lang="javascript">var
radians = Math.PI / 4, // Pi / 4 is 45 degrees. All answers should be the same.
degrees = 45.0,
Line 1,165 ⟶ 2,001:
window.alert(arccos + " " + (arccos * 180 / Math.PI));
// arctangent
window.alert(arctan + " " + (arctan * 180 / Math.PI));</langsyntaxhighlight>
 
=={{header|jq}}==
 
jq includes the standard C-library trigonometric functions (sin, cos, tan, asin, acos, atan), but they are provided as filters as illustrated in the definition of <tt>radians</tt> below.
 
The trigonometric filters only accept radians, so conversion is necessary when dealing with degrees. The constant <tt>π</tt> can be defined as also shown in the following definition of <tt>radians</tt>:<syntaxhighlight lang="jq">
# degrees to radians
def radians:
(-1|acos) as $pi | (. * $pi / 180);
 
def task:
(-1|acos) as $pi
| ($pi / 180) as $degrees
| "Using radians:",
" sin(-pi / 6) = \( (-$pi / 6) | sin )",
" cos(3 * pi / 4) = \( (3 * $pi / 4) | cos)",
" tan(pi / 3) = \( ($pi / 3) | tan)",
" asin(-1 / 2) = \((-1 / 2) | asin)",
" acos(-sqrt(2)/2) = \((-(2|sqrt)/2) | acos )",
" atan(sqrt(3)) = \( 3 | sqrt | atan )",
 
"Using degrees:",
" sin(-30) = \((-30 * $degrees) | sin)",
" cos(135) = \((135 * $degrees) | cos)",
" tan(60) = \(( 60 * $degrees) | tan)",
" asin(-1 / 2) = \( (-1 / 2) | asin / $degrees)",
" acos(-sqrt(2)/2) = \( (-(2|sqrt) / 2) | acos / $degrees)",
" atan(sqrt(3)) = \( (3 | sqrt) | atan / $degrees)"
;
 
task
</syntaxhighlight>
{{out}}
<syntaxhighlight lang="sh">Using radians:
sin(-pi / 6) = -0.49999999999999994
cos(3 * pi / 4) = -0.7071067811865475
tan(pi / 3) = 1.7320508075688767
asin(-1 / 2) = -0.5235987755982988
acos(-sqrt(2)/2) = 2.356194490192345
atan(sqrt(3)) = 1.0471975511965979
Using degrees:
sin(-30) = -0.49999999999999994
cos(135) = -0.7071067811865475
tan(60) = 1.7320508075688767
asin(-1 / 2) = -29.999999999999996
acos(-sqrt(2)/2) = 135
atan(sqrt(3)) = 60.00000000000001</syntaxhighlight>
 
=={{header|Jsish}}==
Like many programming languages that handle trig, Jsish also includes the ''atan2'' function, which was originally added to Fortran to allow disambiguous results when converting from cartesian to polar coordinates, due to the mirror image nature of normal arctan.
 
To find what methods are supported, ''jsish'' supports help for the Math module.
 
<pre>help Math
Math.method(...)
Commands performing math operations on numbers
Methods: abs acos asin atan atan2 ceil cos exp floor log max min pow random round sin sqrt tan</pre>
 
Angles passed to the trigonometric functions expect arguments in ''radians'' (Pi by 4 radians being 45 degrees). Degree to radian conversion is shown by multiplying radians by Pi over 180.
 
''Note the inexact nature of floating point approximations.''
 
<syntaxhighlight lang="javascript">/* Trig in Jsish */
var x;
 
;x = Math.PI / 4;
;Math.sin(x);
;Math.cos(x);
;Math.tan(x);
;Math.asin(Math.sin(x)) * 4;
;Math.acos(Math.cos(x)) * 4;
;Math.atan(Math.tan(x));
;Math.atan2(Math.tan(x), 1.0);
;Math.atan2(Math.tan(x), -1.0);
 
;x = 45.0;
;Math.sin(x * Math.PI / 180);
;Math.cos(x * Math.PI / 180);
;Math.tan(x * Math.PI / 180);
 
/*
=!EXPECTSTART!=
x = Math.PI / 4 ==> 0.7853981633974483
Math.sin(x) ==> 0.7071067811865475
Math.cos(x) ==> 0.7071067811865476
Math.tan(x) ==> 0.9999999999999999
Math.asin(Math.sin(x)) * 4 ==> 3.141592653589793
Math.acos(Math.cos(x)) * 4 ==> 3.141592653589793
Math.atan(Math.tan(x)) ==> 0.7853981633974483
Math.atan2(Math.tan(x), 1.0) ==> 0.7853981633974483
Math.atan2(Math.tan(x), -1.0) ==> 2.356194490192345
x = 45.0 ==> 45
Math.sin(x * Math.PI / 180) ==> 0.7071067811865475
Math.cos(x * Math.PI / 180) ==> 0.7071067811865476
Math.tan(x * Math.PI / 180) ==> 0.9999999999999999
=!EXPECTEND!=
*/</syntaxhighlight>
 
{{out}}
<pre>prompt$ jsish --U trigonometric.jsi
x = Math.PI / 4 ==> 0.7853981633974483
Math.sin(x) ==> 0.7071067811865475
Math.cos(x) ==> 0.7071067811865476
Math.tan(x) ==> 0.9999999999999999
Math.asin(Math.sin(x)) * 4 ==> 3.141592653589793
Math.acos(Math.cos(x)) * 4 ==> 3.141592653589793
Math.atan(Math.tan(x)) ==> 0.7853981633974483
Math.atan2(Math.tan(x), 1.0) ==> 0.7853981633974483
Math.atan2(Math.tan(x), -1.0) ==> 2.356194490192345
x = 45.0 ==> 45
Math.sin(x * Math.PI / 180) ==> 0.7071067811865475
Math.cos(x * Math.PI / 180) ==> 0.7071067811865476
Math.tan(x * Math.PI / 180) ==> 0.9999999999999999
 
prompt$ jsish -u trigonometric.jsi
[PASS] trigonometric.jsi</pre>
 
=={{header|Julia}}==
<syntaxhighlight lang="julia"># v0.6.0
 
rad = π / 4
deg = 45.0
 
@show rad deg
@show sin(rad) sin(deg2rad(deg))
@show cos(rad) cos(deg2rad(deg))
@show tan(rad) tan(deg2rad(deg))
@show asin(sin(rad)) asin(sin(rad)) |> rad2deg
@show acos(cos(rad)) acos(cos(rad)) |> rad2deg
@show atan(tan(rad)) atan(tan(rad)) |> rad2deg</syntaxhighlight>
 
{{out}}
<pre>rad = 0.7853981633974483
deg = 45.0
sin(rad) = 0.7071067811865475
sin(deg2rad(deg)) = 0.7071067811865475
cos(rad) = 0.7071067811865476
cos(deg2rad(deg)) = 0.7071067811865476
tan(rad) = 0.9999999999999999
tan(deg2rad(deg)) = 0.9999999999999999
asin(sin(rad)) = 0.7853981633974482
asin(sin(rad)) |> rad2deg = 44.99999999999999
acos(cos(rad)) = 0.7853981633974483
acos(cos(rad)) |> rad2deg = 45.0
atan(tan(rad)) = 0.7853981633974483
atan(tan(rad)) |> rad2deg = 45.0</pre>
 
=={{header|Kotlin}}==
<syntaxhighlight lang="kotlin">import kotlin.math.*
 
fun main() {
fun Double.toDegrees() = this * 180 / PI
val angle = PI / 4
println("angle = $angle rad = ${angle.toDegrees()}°")
val sine = sin(angle)
println("sin(angle) = $sine")
val cosine = cos(angle)
println("cos(angle) = $cosine")
val tangent = tan(angle)
println("tan(angle) = $tangent")
println()
 
val asin = asin(sine)
println("asin(sin(angle)) = $asin rad = ${asin.toDegrees()}°")
val acos = acos(cosine)
println("acos(cos(angle)) = $acos rad = ${acos.toDegrees()}°")
val atan = atan(tangent)
println("atan(tan(angle)) = $atan rad = ${atan.toDegrees()}°")
}</syntaxhighlight>
 
{{out}}
<pre>
angle = 0.7853981633974483 rad = 45.0°
sin(angle) = 0.7071067811865475
cos(angle) = 0.7071067811865476
tan(angle) = 0.9999999999999999
 
asin(sin(angle)) = 0.7853981633974482 rad = 44.99999999999999°
acos(cos(angle)) = 0.7853981633974483 rad = 45.0°
atan(tan(angle)) = 0.7853981633974483 rad = 45.0°
</pre>
 
=={{header|Lambdatalk}}==
<syntaxhighlight lang="scheme">
{def deg2rad {lambda {:d} {* {/ {PI} 180} :d}}}
-> deg2rad
{def rad2deg {lambda {:r} {* {/ 180 {PI}} :r}}}
-> rad2deg
 
{deg2rad 180}
-> 3.141592653589793 = PI
{rad2deg {PI}}°
-> 180°
 
{sin {deg2rad 45}}
-> 0.7071067811865475 = PI/4
{cos {deg2rad 45}}
-> 0.7071067811865476 = PI/4
{tan {deg2rad 45}}
-> 0.9999999999999999 = 1
 
{rad2deg {asin 0.5}}° -> 30.000000000000004°
{rad2deg {acos 0.5}}° -> 60.00000000000001°
{rad2deg {atan 1}}° -> 45°
</syntaxhighlight>
 
=={{header|Liberty BASIC}}==
<langsyntaxhighlight lang="lb">pi = ACS(-1)
radians = pi / 4.0
rtod = 180 / pi
Line 1,181 ⟶ 2,223:
print "Asn: ";ASN(SIN(radians));" Rad, "; ASN(SIN(degrees*dtor))*rtod;" Deg"
print "Acs: ";ACS(COS(radians));" Rad, "; ACS(COS(degrees*dtor))*rtod;" Deg"
print "Atn: ";ATN(TAN(radians));" Rad, "; ATN(TAN(degrees*dtor))*rtod;" Deg"</langsyntaxhighlight>Output:
{{out}}
<pre>Sin: 0.70710678 0.70710678
Cos: 0.70710678 0.70710678
Line 1,192 ⟶ 2,235:
=={{header|Logo}}==
[[UCB Logo]] has sine, cosine, and arctangent; each having variants for degrees or radians.
<langsyntaxhighlight lang="logo">print sin 45
print cos 45
print arctan 1
Line 1,198 ⟶ 2,241:
print radsin :pi / 4
print radcos :pi / 4
print 4 * radarctan 1</langsyntaxhighlight>
 
 
[[Lhogho]] has pi defined in its trigonometric functions. Otherwise the same as UCB Logo.
<langsyntaxhighlight lang="logo">print sin 45
print cos 45
print arctan 1
print radsin pi / 4
print radcos pi / 4
print 4 * radarctan 1</langsyntaxhighlight>
 
=={{header|Logtalk}}==
<langsyntaxhighlight lang="logtalk">
:- object(trignomeric_functions).
 
Line 1,225 ⟶ 2,268:
 
:- end_object.
</syntaxhighlight>
</lang>
{{out}}
Output:
<langsyntaxhighlight lang="text">
?- trignomeric_functions::show.
sin(pi/4.0) = 0.7071067811865475
Line 1,237 ⟶ 2,280:
atan2(3,4) = 0.6435011087932844
yes
</syntaxhighlight>
</lang>
 
=={{header|Lua}}==
<langsyntaxhighlight lang="lua">print(math.cos(1), math.sin(1), math.tan(1), math.atan(1), math.atan2(3, 4))</langsyntaxhighlight>
 
=={{header|MathematicaMaple}}==
In radians:
<lang Mathematica>Sin[1]
<syntaxhighlight lang="maple">sin(Pi/3);
cos(Pi/3);
tan(Pi/3);</syntaxhighlight>
{{out}}
<pre>
> sin(Pi/3);
1/2
3
----
2
> cos(Pi/3);
1/2
 
> tan(Pi/3);
1/2
3
</pre>
 
The equivalent in degrees with identical output:
<syntaxhighlight lang="maple">with(Units[Standard]):
sin(60*Unit(degree));
cos(60*Unit(degree));
tan(60*Unit(degree));</syntaxhighlight>
 
Note, Maple also has secant, cosecant, and cotangent:
<syntaxhighlight lang="maple">csc(Pi/3);
sec(Pi/3);
cot(Pi/3);</syntaxhighlight>
 
Finally, the inverse trigonometric functions:
<syntaxhighlight lang="maple">arcsin(1);
arccos(1);
arctan(1);</syntaxhighlight>
{{out}}
<pre>> arcsin(1);
Pi
----
2
 
> arccos(1);
0
 
> arctan(1);
Pi
----
4
</pre>
 
Lastly, Maple also supports the two-argument arctan plus all the hyperbolic trigonometric functions.
 
=={{header|Mathematica}}/{{header|Wolfram Language}}==
<syntaxhighlight lang="mathematica">Sin[1]
Cos[1]
Tan[1]
Line 1,251 ⟶ 2,346:
Sin[90 Degree]
Cos[90 Degree]
Tan[90 Degree]</syntaxhighlight>
</lang>
 
=={{header|MATLAB}}==
A full list of built-in trig functions can be found in the [http://www.mathworks.com/access/helpdesk/help/techdoc/ref/f16-5872.html#f16-6197 MATLAB Documentation].
 
<langsyntaxhighlight MATLABlang="matlab">function trigExample(angleDegrees)
 
angleRadians = angleDegrees * (pi/180);
Line 1,269 ⟶ 2,363:
disp(sprintf('tan(%f)= %f\natan(%f)= %f',[angleRadians tan(angleRadians) tan(angleRadians) atan(tan(angleRadians))]));
disp(sprintf('tand(%f)= %f\narctand(%f)= %f',[angleDegrees tand(angleDegrees) tand(angleDegrees) atand(tand(angleDegrees))]));
end</langsyntaxhighlight>
 
{{out}}
Sample Output:
<langsyntaxhighlight MATLABlang="matlab">>> trigExample(78)
sin(1.361357)= 0.978148
asin(0.978148)= 1.361357
Line 1,286 ⟶ 2,380:
atan(4.704630)= 1.361357
tand(78.000000)= 4.704630
arctand(4.704630)= 78.000000</langsyntaxhighlight>
 
=={{header|Maxima}}==
<langsyntaxhighlight lang="maxima">a: %pi / 3;
[sin(a), cos(a), tan(a), sec(a), csc(a), cot(a)];
 
Line 1,298 ⟶ 2,392:
a: 1 / 2;
[sinh(a), cosh(a), tanh(a), sech(a), csch(a), coth(a)], numer;
[asinh(a), acosh(1 / a), atanh(a), asech(a), acsch(a), acoth(1 / a)], numer;</langsyntaxhighlight>
 
=={{header|MAXScript}}==
Maxscript trigonometric functions accept degrees only. The built-ins degToRad and radToDeg allow easy conversion.
<langsyntaxhighlight lang="maxscript">local radians = pi / 4
local degrees = 45.0
 
Line 1,322 ⟶ 2,416:
--arctangent
print (atan (tan (radToDeg radians)))
print (atan (tan degrees))</langsyntaxhighlight>
 
=={{header|Metafont}}==
Line 1,328 ⟶ 2,422:
Metafont has <code>sind</code> and <code>cosd</code>, which compute sine and cosine of an angle expressed in degree. We need to define the rest.
 
<langsyntaxhighlight lang="metafont">Pi := 3.14159;
vardef torad expr x = Pi*x/180 enddef; % conversions
vardef todeg expr x = 180x/Pi enddef;
Line 1,373 ⟶ 2,467:
outcompare(tan(Pi/3), tand(60));
 
end</langsyntaxhighlight>
 
=={{header|MiniScript}}==
<syntaxhighlight lang="miniscript">pi3 = pi/3
degToRad = pi/180
print "sin PI/3 radians = " + sin(pi3)
print "sin 60 degrees = " + sin(60*degToRad)
print "arcsin 0.5 in radians = " + asin(0.5)
print "arcsin 0.5 in degrees = " + asin(0.5)/degToRad
print "cos PI/3 radians = " + cos(pi3)
print "cos 60 degrees = " + cos(60*degToRad)
print "arccos 0.5 in radians = " + acos(0.5)
print "arccos 0.5 in degrees = " + acos(0.5)/degToRad
print "tan PI/3 radians = " + tan(pi3)
print "tan 60 degrees = " + tan(60*degToRad)
print "arctan 0.5 in radians = " + atan(0.5)
print "arctan 0.5 in degrees = " + atan(0.5)/degToRad</syntaxhighlight>
{{out}}
<pre>
sin PI/3 radians = 0.866025
sin 60 degrees = 0.866025
arcsin 0.5 in radians = 0.523599
arcsin 0.5 in degrees = 30.0
cos PI/3 radians = 0.5
cos 60 degrees = 0.5
arccos 0.5 in radians = 1.047198
arccos 0.5 in degrees = 60.0
tan PI/3 radians = 1.732051
tan 60 degrees = 1.732051
arctan 0.5 in radians = 0.463648
arctan 0.5 in degrees = 26.565051
</pre>
 
=={{header|МК-61/52}}==
Line 1,382 ⟶ 2,507:
 
Setting the units of angle (degrees, radians, grads) takes care of the switch ''Р-ГРД-Г''.
 
=={{header|Modula-2}}==
<syntaxhighlight lang="modula2">MODULE Trig;
FROM RealMath IMPORT pi,sin,cos,tan,arctan,arccos,arcsin;
FROM RealStr IMPORT RealToStr;
FROM Terminal IMPORT WriteString,WriteLn,ReadChar;
 
PROCEDURE WriteReal(v : REAL);
VAR buf : ARRAY[0..31] OF CHAR;
BEGIN
RealToStr(v, buf);
WriteString(buf)
END WriteReal;
 
VAR theta : REAL;
BEGIN
theta := pi / 4.0;
 
WriteString("theta: ");
WriteReal(theta);
WriteLn;
 
WriteString("sin: ");
WriteReal(sin(theta));
WriteLn;
 
WriteString("cos: ");
WriteReal(cos(theta));
WriteLn;
 
WriteString("tan: ");
WriteReal(tan(theta));
WriteLn;
 
WriteString("arcsin: ");
WriteReal(arcsin(sin(theta)));
WriteLn;
 
WriteString("arccos: ");
WriteReal(arccos(cos(theta)));
WriteLn;
 
WriteString("arctan: ");
WriteReal(arctan(tan(theta)));
WriteLn;
 
ReadChar
END Trig.</syntaxhighlight>
 
=={{header|NetRexx}}==
<langsyntaxhighlight NetRexxlang="netrexx">/* NetRexx */
options replace format comments java crossref symbols nobinary utf8
 
Line 1,419 ⟶ 2,592:
 
return
</syntaxhighlight>
</lang>
 
{{out}}
'''Output:'''
<pre>
| Radians | Degrees |
Line 1,432 ⟶ 2,605:
arctangent| 0.785398163397 | 45.000000000000 |
</pre>
 
=={{header|Nim}}==
<syntaxhighlight lang="nim">import math, strformat
 
let rad = Pi/4
let deg = 45.0
 
echo &"Sine: {sin(rad):.10f} {sin(degToRad(deg)):13.10f}"
echo &"Cosine : {cos(rad):.10f} {cos(degToRad(deg)):13.10f}"
echo &"Tangent: {tan(rad):.10f} {tan(degToRad(deg)):13.10f}"
echo &"Arcsine: {arcsin(sin(rad)):.10f} {radToDeg(arcsin(sin(degToRad(deg)))):13.10f}"
echo &"Arccosine: {arccos(cos(rad)):.10f} {radToDeg(arccos(cos(degToRad(deg)))):13.10f}"
echo &"Arctangent: {arctan(tan(rad)):.10f} {radToDeg(arctan(tan(degToRad(deg)))):13.10f}"
</syntaxhighlight>
 
{{out}}
<pre>Sine: 0.7071067812 0.7071067812
Cosine : 0.7071067812 0.7071067812
Tangent: 1.0000000000 1.0000000000
Arcsine: 0.7853981634 45.0000000000
Arccosine: 0.7853981634 45.0000000000
Arctangent: 0.7853981634 45.0000000000</pre>
 
=={{header|OCaml}}==
 
OCaml's preloaded <tt>Pervasives</tt> module contains all six functions. The functions all accept radians only, so conversion is necessary when dealing with degrees.
<langsyntaxhighlight lang="ocaml">let pi = 4. *. atan 1.
 
let radians = pi /. 4.
Line 1,449 ⟶ 2,644:
Printf.printf "%f %f\n" arccos (arccos *. 180. /. pi);;
let arctan = atan (tan radians);;
Printf.printf "%f %f\n" arctan (arctan *. 180. /. pi);;</langsyntaxhighlight>
{{out}}
Output:
<pre>
0.707107 0.707107
Line 1,462 ⟶ 2,657:
=={{header|Octave}}==
 
<langsyntaxhighlight lang="octave">function d = degree(rad)
d = 180*rad/pi;
endfunction
Line 1,482 ⟶ 2,677:
ifuncs{i}, v, iv,
strcat(ifuncs{i}, "d"), vd, ivd);
endfor</langsyntaxhighlight>
 
Output:
 
{{out}}
<pre>sin(1.047198) = sind(60.000000) = 0.866025 (0.866025)
asin(0.866025) = 1.047198
Line 1,506 ⟶ 2,700:
 
(Lacking in this code but present in GNU Octave: sinh, cosh, tanh, coth and inverses)
 
=={{header|Oforth}}==
 
<syntaxhighlight lang="oforth">import: math
 
: testTrigo
| rad deg hyp z |
Pi 4 / ->rad
45.0 ->deg
0.5 ->hyp
 
System.Out rad sin << " - " << deg asRadian sin << cr
System.Out rad cos << " - " << deg asRadian cos << cr
System.Out rad tan << " - " << deg asRadian tan << cr
 
printcr
 
rad sin asin ->z
System.Out z << " - " << z asDegree << cr
 
rad cos acos ->z
System.Out z << " - " << z asDegree << cr
 
rad tan atan ->z
System.Out z << " - " << z asDegree << cr
printcr
 
System.Out hyp sinh << " - " << hyp sinh asinh << cr
System.Out hyp cosh << " - " << hyp cosh acosh << cr
System.Out hyp tanh << " - " << hyp tanh atanh << cr ;</syntaxhighlight>
 
{{out}}
<pre>
0.707106781186547 - 0.707106781186547
0.707106781186548 - 0.707106781186548
1 - 1
 
0.785398163397448 - 45
0.785398163397448 - 45
0.785398163397448 - 45
 
0.521095305493747 - 0.5
1.12762596520638 - 0.5
0.46211715726001 - 0.5
</pre>
 
=={{header|ooRexx}}==
Line 1,589 ⟶ 2,829:
rxCalcexp(x) limits x to 709. or so and returns '+infinity' for larger exponents
</pre>
<langsyntaxhighlight lang="oorexx">/* REXX ---------------------------------------------------------------
* show how the functions can be used
* 03.05.2014 Walter Pachl
Line 1,606 ⟶ 2,846:
Say 'Changed type: ' .locaL~my.rxm~type()
Say 'rxmsin(1) ='rxmsin(1) -- use changed precision and type
::requires rxm.cls</langsyntaxhighlight>
{{out}}
Output:
<pre>Default precision: 16
Default type: D
Line 1,620 ⟶ 2,860:
rxmsin(1) =0.84147098480789650665250232163029899962256306079837</pre>
 
<langsyntaxhighlight lang="oorexx">/*********************************************************************
* Package rxm
* implements the functions available in RxMath with high precision
Line 1,626 ⟶ 2,866:
* and rounding the result to the specified precision.
* This started 10 years ago when Vladimir Zabrodsky published his
* Album of Algorithms http://dhostzabrodsky-rexx.info/zabrodskyvladabyethost18.com/aat/
* GeraldGerard Schildberger suggests on rosettacode.org to use +10 digits
* Rony Flatscher suggested and helped to turn this into an ooRexx class
* Rick McGuire advised on using Use STRICT Arg for argument checking
Line 1,640 ⟶ 2,880:
* 24.04.2014 WP arcsin verbessert. courtesy Horst Wegscheider
* 28.04.2014 WP run ooRexxDoc
* 11.08.2014 WP replace log algorithm with Vladimir Zabrodsky's code
* 12.05.2014 WP added routine rxmhelp
**********************************************************************/
.local~my.rxm=.rxm~new(16,"D")
Line 1,920 ⟶ 3,160:
Expose precision
Use Strict Arg x,xprec=(precision),xbase=''
iprec=xprec+10100
Numeric Digits iprec
Select
When x=0 Then Return '-infinity'
When x<0 Then Return 'nan'
When x<0.51 Then Do r= -self~Log(1/X,xprec)
Otherwise Do
z=(x-1)/(x+1)
do M = 0 until (2 ** M) > X; end
o=z
rM =z M - 1
kZ =1 X / (2 ** M)
DoZeta i=3 By(1 2- UntilZ) ra=r/ (1 + Z)
N = Zeta; Ln = Zeta; Zetasup2 = Zeta * Zeta
ra=r
do J k=k+ 1
oN =o N *z Zetasup2; NewLn = Ln + N / (2 *z J + 1)
rif NewLn =r+o/i Ln then Do
r= M * self~LN2P(xprec) - 2 * Ln
End
r=2*r Leave
End
When x<1.5 Then Do Ln = NewLn
z=(x-1) end
o=z
r=z
k=1
Do i=2 By 1 Until ra=r
ra=r
k=k+1
o=-o*z
r=r+o/i
End
End
Otherwise /* 1.5<=x */ Do
z=(x+1)/(x-1)
o=1/z
r=o
k=1
Do i=3 By 2 Until ra=r
ra=r
k=k+1
o=o/(z*z)
r=r+o/i
End
r=2*r
End
End
Line 1,971 ⟶ 3,189:
End
Return r
 
::Method ln2p
Parse Arg p
Numeric Digits p+10
If p<=1000 Then
Return self~ln2()
n=1/3
ln=n
zetasup2=1/9
Do j=1
n=n*zetasup2
newln=ln+n/(2*j+1)
If newln=ln Then
Return 2*ln
ln=newln
End
 
::Method LN2
v=''
v=v||0.69314718055994530941723212145817656807
v=v||5500134360255254120680009493393621969694
v=v||7156058633269964186875420014810205706857
v=v||3368552023575813055703267075163507596193
v=v||0727570828371435190307038623891673471123
v=v||3501153644979552391204751726815749320651
v=v||5552473413952588295045300709532636664265
v=v||4104239157814952043740430385500801944170
v=v||6416715186447128399681717845469570262716
v=v||3106454615025720740248163777338963855069
v=v||5260668341137273873722928956493547025762
v=v||6520988596932019650585547647033067936544
v=v||3254763274495125040606943814710468994650
v=v||6220167720424524529612687946546193165174
v=v||6813926725041038025462596568691441928716
v=v||0829380317271436778265487756648508567407
v=v||7648451464439940461422603193096735402574
v=v||4460703080960850474866385231381816767514
v=v||3866747664789088143714198549423151997354
v=v||8803751658612753529166100071053558249879
v=v||4147295092931138971559982056543928717000
v=v||7218085761025236889213244971389320378439
v=v||3530887748259701715591070882368362758984
v=v||2589185353024363421436706118923678919237
v=v||231467232172053401649256872747782344535348
 
return V
 
::Method log10
Line 2,046 ⟶ 3,311:
Else Do /* Exponent is not an integer */
-- Say 'for a negative base ('||b')',
-- 'exponent ('c') must be an integer'
Return 'nan' /* Return not a number */
End
Line 2,613 ⟶ 3,878:
 
return .my.rxm~tanh(x,xprec)
 
 
::routine rxmhelp public
Line 2,627 ⟶ 3,891:
Say " .locaL~my.rxm~precision=50"
Say " .locaL~my.rxm~type='R'"
return 0 </langsyntaxhighlight>
 
=={{header|Oz}}==
<langsyntaxhighlight lang="oz">declare
PI = 3.14159265
 
Line 2,650 ⟶ 3,914:
for I#F in [Asin#Sin Acos#Cos Atan#Tan] do
{System.showInfo {I {F Radians}}#" "#{ToDegrees {I {F Radians}}}}
end</langsyntaxhighlight>
 
=={{header|PARI/GP}}==
Pari accepts only radians; the conversion is simple but not included here.
<langsyntaxhighlight lang="parigp">cos(Pi/2)
sin(Pi/2)
tan(Pi/2)
acos(1)
asin(1)
atan(1)</langsyntaxhighlight>
 
{{works with|PARI/GP|2.4.3 and above}}
<langsyntaxhighlight lang="parigp">apply(f->f(1), [cos,sin,tan,acos,asin,atan])</langsyntaxhighlight>
 
=={{header|Pascal}}==
{{libheader|math}}
<langsyntaxhighlight lang="pascal">Program TrigonometricFuntions(output);
 
uses
Line 2,686 ⟶ 3,950:
writeln (arctan(tan(radians)),' Rad., or ', arctan(tan(degree/180*pi))/pi*180,' Deg.');
// ( radians ) / pi * 180 = deg.
end.</langsyntaxhighlight>Output:
{{out}}
<pre> 7.0710678118654750E-0001 7.0710678118654752E-0001
7.0710678118654755E-0001 7.0710678118654752E-0001
Line 2,698 ⟶ 3,963:
{{works with|Perl|5.8.8}}
 
<langsyntaxhighlight lang="perl">use Math::Trig;
 
my $angle_degrees = 45;
Line 2,714 ⟶ 3,979:
print $atan, ' ', rad2deg($atan), "\n";
my $acot = acot(cot($angle_radians));
print $acot, ' ', rad2deg($acot), "\n";</langsyntaxhighlight>
 
{{out}}
Output:
<pre>
0.707106781186547 0.707106781186547
Line 2,728 ⟶ 3,993:
</pre>
 
=={{header|Perl 6Phix}}==
{{libheader|Phix/basics}}
{{works with|Rakudo|#22 "Thousand Oaks"}}
<!--<syntaxhighlight lang="phix">(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #0000FF;">?</span><span style="color: #7060A8;">sin</span><span style="color: #0000FF;">(</span><span style="color: #004600;">PI</span><span style="color: #0000FF;">/</span><span style="color: #000000;">2</span><span style="color: #0000FF;">)</span>
<span style="color: #0000FF;">?</span><span style="color: #7060A8;">sin</span><span style="color: #0000FF;">(</span><span style="color: #000000;">90</span><span style="color: #0000FF;">*</span><span style="color: #004600;">PI</span><span style="color: #0000FF;">/</span><span style="color: #000000;">180</span><span style="color: #0000FF;">)</span>
<span style="color: #0000FF;">?</span><span style="color: #7060A8;">cos</span><span style="color: #0000FF;">(</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
<span style="color: #0000FF;">?</span><span style="color: #7060A8;">cos</span><span style="color: #0000FF;">(</span><span style="color: #000000;">0</span><span style="color: #0000FF;">*</span><span style="color: #004600;">PI</span><span style="color: #0000FF;">/</span><span style="color: #000000;">180</span><span style="color: #0000FF;">)</span>
<span style="color: #0000FF;">?</span><span style="color: #7060A8;">tan</span><span style="color: #0000FF;">(</span><span style="color: #004600;">PI</span><span style="color: #0000FF;">/</span><span style="color: #000000;">4</span><span style="color: #0000FF;">)</span>
<span style="color: #0000FF;">?</span><span style="color: #7060A8;">tan</span><span style="color: #0000FF;">(</span><span style="color: #000000;">45</span><span style="color: #0000FF;">*</span><span style="color: #004600;">PI</span><span style="color: #0000FF;">/</span><span style="color: #000000;">180</span><span style="color: #0000FF;">)</span>
<span style="color: #0000FF;">?</span><span style="color: #7060A8;">arcsin</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)*</span><span style="color: #000000;">2</span>
<span style="color: #0000FF;">?</span><span style="color: #7060A8;">arcsin</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)*</span><span style="color: #000000;">180</span><span style="color: #0000FF;">/</span><span style="color: #004600;">PI</span>
<span style="color: #0000FF;">?</span><span style="color: #7060A8;">arccos</span><span style="color: #0000FF;">(</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)*</span><span style="color: #000000;">2</span>
<span style="color: #0000FF;">?</span><span style="color: #7060A8;">arccos</span><span style="color: #0000FF;">(</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)*</span><span style="color: #000000;">180</span><span style="color: #0000FF;">/</span><span style="color: #004600;">PI</span>
<span style="color: #0000FF;">?</span><span style="color: #7060A8;">arctan</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)*</span><span style="color: #000000;">4</span>
<span style="color: #0000FF;">?</span><span style="color: #7060A8;">arctan</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)*</span><span style="color: #000000;">180</span><span style="color: #0000FF;">/</span><span style="color: #004600;">PI</span>
<!--</syntaxhighlight>-->
{{out}}
<pre>
1
1
1
1
1.0
1.0
3.141592654
90
3.141592654
90
3.141592654
45
</pre>
 
=={{header|PHP}}==
<lang perl6>say sin(pi/3), ' ', sin 60, 'd'; # 'g' (gradians) and 1 (circles)
<syntaxhighlight lang="php">$radians = M_PI / 4;
say cos(pi/4), ' ', cos 45, 'd'; # are also recognized.
$degrees = 45 * M_PI / 180;
say tan(pi/6), ' ', tan 30, 'd';
echo sin($radians) . " " . sin($degrees);
echo cos($radians) . " " . cos($degrees);
echo tan($radians) . " " . tan($degrees);
echo asin(sin($radians)) . " " . asin(sin($radians)) * 180 / M_PI;
echo acos(cos($radians)) . " " . acos(cos($radians)) * 180 / M_PI;
echo atan(tan($radians)) . " " . atan(tan($radians)) * 180 / M_PI;</syntaxhighlight>
 
=={{header|PicoLisp}}==
say asin(sqrt(3)/2), ' ', asin sqrt(3)/2, 'd';
<syntaxhighlight lang="picolisp">(load "@lib/math.l")
say acos(1/sqrt 2), ' ', acos 1/sqrt(2), 'd';
 
say atan(1/sqrt 3), ' ', atan 1/sqrt(3), 'd';</lang>
(de dtor (Deg)
(*/ Deg pi 180.0) )
 
(de rtod (Rad)
(*/ Rad 180.0 pi) )
 
(prinl
(format (sin (/ pi 4)) *Scl) " " (format (sin (dtor 45.0)) *Scl) )
(prinl
(format (cos (/ pi 4)) *Scl) " " (format (cos (dtor 45.0)) *Scl) )
(prinl
(format (tan (/ pi 4)) *Scl) " " (format (tan (dtor 45.0)) *Scl) )
(prinl
(format (asin (sin (/ pi 4))) *Scl) " " (format (rtod (asin (sin (dtor 45.0)))) *Scl) )
(prinl
(format (acos (cos (/ pi 4))) *Scl) " " (format (rtod (acos (cos (dtor 45.0)))) *Scl) )
(prinl
(format (atan (tan (/ pi 4))) *Scl) " " (format (rtod (atan (tan (dtor 45.0)))) *Scl) )</syntaxhighlight>
{{out}}
<pre>0.707107 0.707107
0.707107 0.707107
1.000000 1.000000
0.785398 44.999986
0.785398 44.999986
0.785398 44.999986</pre>
 
=={{header|PL/I}}==
<syntaxhighlight lang="pl/i">
<lang PL/I>
declare (x, xd, y, v) float;
 
Line 2,759 ⟶ 4,085:
v = cosh(x); put skip list (v);
v = tanh(x); y = atanh(v); put skip list (y);
</syntaxhighlight>
</lang>
Results:
<pre>
Line 2,778 ⟶ 4,104:
ATAN2 are accurate to 30 decimal digits.
 
<langsyntaxhighlight lang="plsql">DECLARE
pi NUMBER := 4 * atan(1);
radians NUMBER := pi / 4;
Line 2,789 ⟶ 4,115:
DBMS_OUTPUT.put_line(ACOS(COS(radians)) || ' ' || ACOS(COS(degrees * pi/180)) * 180/pi);
DBMS_OUTPUT.put_line(ATAN(TAN(radians)) || ' ' || ATAN(TAN(degrees * pi/180)) * 180/pi);
end;</langsyntaxhighlight>
 
{{out}}
Output:
<pre>,7071067811865475244008443621048490392889 ,7071067811865475244008443621048490392893
,7071067811865475244008443621048490392783 ,7071067811865475244008443621048490392779
Line 2,800 ⟶ 4,126:
 
The following trigonometric functions are also available
<langsyntaxhighlight lang="plsql">ATAN2(n1,n2) --Arctangent(y/x), -pi < result <= +pi
SINH(n) --Hyperbolic sine
COSH(n) --Hyperbolic cosine
TANH(n) --Hyperbolic tangent</langsyntaxhighlight>
 
=={{header|PHP}}==
<lang php>$radians = M_PI / 4;
$degrees = 45 * M_PI / 180;
echo sin($radians) . " " . sin($degrees);
echo cos($radians) . " " . cos($degrees);
echo tan($radians) . " " . tan($degrees);
echo asin(sin($radians)) . " " . asin(sin($radians)) * 180 / M_PI;
echo acos(cos($radians)) . " " . acos(cos($radians)) * 180 / M_PI;
echo atan(tan($radians)) . " " . atan(tan($radians)) * 180 / M_PI;</lang>
 
=={{header|PicoLisp}}==
<lang PicoLisp>(load "@lib/math.l")
 
(de dtor (Deg)
(*/ Deg pi 180.0) )
 
(de rtod (Rad)
(*/ Rad 180.0 pi) )
 
(prinl
(format (sin (/ pi 4)) *Scl) " " (format (sin (dtor 45.0)) *Scl) )
(prinl
(format (cos (/ pi 4)) *Scl) " " (format (cos (dtor 45.0)) *Scl) )
(prinl
(format (tan (/ pi 4)) *Scl) " " (format (tan (dtor 45.0)) *Scl) )
(prinl
(format (asin (sin (/ pi 4))) *Scl) " " (format (rtod (asin (sin (dtor 45.0)))) *Scl) )
(prinl
(format (acos (cos (/ pi 4))) *Scl) " " (format (rtod (acos (cos (dtor 45.0)))) *Scl) )
(prinl
(format (atan (tan (/ pi 4))) *Scl) " " (format (rtod (atan (tan (dtor 45.0)))) *Scl) )</lang>
Output:
<pre>0.707107 0.707107
0.707107 0.707107
1.000000 1.000000
0.785398 44.999986
0.785398 44.999986
0.785398 44.999986</pre>
 
=={{header|Pop11}}==
Line 2,848 ⟶ 4,135:
Pop11 trigonometric functions accept both degrees and radians. In default mode argument is in degrees, after setting 'popradians' flag to 'true' arguments are in radians.
 
<langsyntaxhighlight lang="pop11">sin(30) =>
cos(45) =>
tan(45) =>
Line 2,862 ⟶ 4,149:
arcsin(0.7) =>
arccos(0.7) =>
arctan(0.7) =></langsyntaxhighlight>
 
=={{header|PostScript}}==
<langsyntaxhighlight lang="postscript">
90 sin =
 
Line 2,877 ⟶ 4,164:
 
3 sqrt 1 atan =
</syntaxhighlight>
</lang>
{{out}}
Output
<pre>
1.0
Line 2,891 ⟶ 4,178:
=={{header|PowerShell}}==
{{Trans|C}}
<langsyntaxhighlight lang="powershell">$rad = [Math]::PI / 4
$deg = 45
'{0,10} {1,10}' -f 'Radians','Degrees'
Line 2,902 ⟶ 4,189:
'{0,10:N6} {1,10:N6}' -f $temp, ($temp * 180 / [Math]::PI)
$temp = [Math]::Atan([Math]::Tan($rad))
'{0,10:N6} {1,10:N6}' -f $temp, ($temp * 180 / [Math]::PI)</langsyntaxhighlight>
{{out}}
Output:
<pre> Radians Degrees
0,707107 0,707107
Line 2,911 ⟶ 4,198:
0,785398 45,000000
0,785398 45,000000</pre>
 
===A More "PowerShelly" Way===
I would send the output as an array of objects containing the (<code>[double]</code>) properties: '''Radians''' and '''Degrees'''.
Notice the difference between the last decimal place in the first two objects. If you were calculating coordinates as a civil engineer or land surveyor this difference could affect your measurments. Additionally, the output is an array of objects containing <code>[double]</code> values rather than an array of strings.
<syntaxhighlight lang="powershell">
$radians = [Math]::PI / 4
$degrees = 45
 
[PSCustomObject]@{Radians=[Math]::Sin($radians); Degrees=[Math]::Sin($degrees * [Math]::PI / 180)}
[PSCustomObject]@{Radians=[Math]::Cos($radians); Degrees=[Math]::Cos($degrees * [Math]::PI / 180)}
[PSCustomObject]@{Radians=[Math]::Tan($radians); Degrees=[Math]::Tan($degrees * [Math]::PI / 180)}
 
[double]$tempVar = [Math]::Asin([Math]::Sin($radians))
[PSCustomObject]@{Radians=$tempVar; Degrees=$tempVar * 180 / [Math]::PI}
 
[double]$tempVar = [Math]::Acos([Math]::Cos($radians))
[PSCustomObject]@{Radians=$tempVar; Degrees=$tempVar * 180 / [Math]::PI}
 
[double]$tempVar = [Math]::Atan([Math]::Tan($radians))
[PSCustomObject]@{Radians=$tempVar; Degrees=$tempVar * 180 / [Math]::PI}
</syntaxhighlight>
{{Out}}
<pre>
Radians Degrees
------- -------
0.707106781186547 0.707106781186547
0.707106781186548 0.707106781186548
1 1
0.785398163397448 45
0.785398163397448 45
0.785398163397448 45
</pre>
 
=={{header|PureBasic}}==
 
<langsyntaxhighlight lang="purebasic">OpenConsole()
 
Macro DegToRad(deg)
Line 2,937 ⟶ 4,256:
PrintN(StrF(arctan)+" "+Str(RadToDeg(arctan)))
 
Input()</langsyntaxhighlight>
 
{{out}}
Output:
<pre>0.707107 0.707107
0.707107 0.707107
Line 2,949 ⟶ 4,268:
=={{header|Python}}==
 
Python's <tt>math</tt> module contains all six functions. The functions all accept radians only, so conversion is necessary when dealing with degrees. The <ttbr>math</tt> module also has <tt>degrees()</tt> and <tt>radians()</tt> functions for easy conversion.
The functions all accept radians only, so conversion is necessary
when dealing with degrees. <br>
The <tt>math</tt> module also has <tt>degrees()</tt> and <tt>radians()</tt> functions for easy conversion.
 
<langsyntaxhighlight lang="python">Python 3.2.2 (default, Sep 4 2011, 09:51:08) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> from math import degrees, radians, sin, cos, tan, asin, acos, atan, pi
Line 2,970 ⟶ 4,292:
>>> print("Arctangent:", arctangent, degrees(arctangent))
Arctangent: 0.7853981633974483 45.0
>>> </langsyntaxhighlight>
 
=={{header|Quackery}}==
 
<code>v**</code> is defined at [[Exponentiation operator#Quackery]].
 
'''Please note''', the code presented here is sufficient to the task, but is not a practical implementation for the reasons discussed below. The intent of this entry is to invite discussion on the subject of Padé Approximants, the method used here. To that end I have opened a section on the subject in the Discussion page of this task, and invite you to contribute to it if you have useful knowledge of Padé Approximants.
 
Full disclosure - I am not a mathematician, I am an amateur programmer who has recently heard of Padé Approximants and is desirous of learning more, as they look to be a useful tool, but not a panacea.
 
A search of Rosetta Code at the time of writing (14 July 2021) finds no references to Padé or Pade on the site. A more general search of the Internet turns up such phrases as "is the "best" approximation of a function by a rational function of given order" and "The unreasonable effectiveness of Pade approximation", which piqued my interest. Generally there are scholarly papers in the subject that whoosh right over my head, and very little at the "pop-maths" level, i.e. no videos by my go-to YouTube channels - numberphile/computerphile, 3blue1brown, mathologer.
 
In the absence of sources pitched at my level, this is the methodology I have developed to create this code.
 
''Step 1''. Use Wolfram Alpha to find Padé Approximants for a function. Here is the relevant documentation for Mathematica, which also applies to Wolfram Alpha. Link: [https://reference.wolfram.com/language/ref/PadeApproximant.html PadeApproximant].
 
Here are the inputs to Wolfram Alpha used in generating this Quackery code. [https://www.wolframalpha.com/input/?i=PadeApproximant%5BSin%5Bx%5D%2C+%7Bx%2C+0%2C+%7B6%2C6%7D%7D%5D sin], [https://www.wolframalpha.com/input/?i=PadeApproximant%5Bcos%5Bx%5D%2C+%7Bx%2C+0%2C+%7B7%2C7%7D%7D%5D cos], [https://www.wolframalpha.com/input/?i=PadeApproximant%5Barccos%5Bx%5D%2C+%7Bx%2C+0%2C+%7B6%2C6%7D%7D%5D tan], [https://www.wolframalpha.com/input/?i=PadeApproximant%5Barcsin%5Bx%5D%2C+%7Bx%2C+0%2C+%7B6%2C6%7D%7D%5D arcsin], [https://www.wolframalpha.com/input/?i=PadeApproximant%5Barccos%5Bx%5D%2C+%7Bx%2C+0%2C+%7B6%2C6%7D%7D%5D+%29 arccos], and [https://www.wolframalpha.com/input/?i=PadeApproximant%5Barctan%5Bx%5D%2C+%7Bx%2C+0%2C+%7B7%2C7%7D%7D%5D arctan].
 
Note that the exact result for <code>arccos</code> includes several instances of the irrational number π, which is not ideal given that the intent is to generate a rational approximation, so instead I used the identity arccos(x)=π/2-arcsin(x), which Wolfram Alpha lists amongst the "Alternate forms", reducing the number of uses of π to one.
 
''Step 2''. Use GeoGebra to see the range of arguments over which the Padé approximant is valid, and to identify the range in which it will return values correct to a given number of decimal places. In each of the following examples, function <code>f</code> is a Padé Approximant, function <code>g</code> is the function that <code>f</code> is approximating, and function <code>h</code> is the difference between <code>f</code> and <code>g</code>, multiplied by <code>10^n</code>, where <code>n</code> can be varied with a slider. Where the <code>h</code> line is very close to zero, the approximation will be good to <code>n</code> decimal places.
 
Your attention is drawn to the task output for <code>arccos</code>, which is only good to a couple of decimal places for the argument passed to it. This is explained by the corresponding graph in Geogebra, where we can see that the argument is outside the safe (i.e. <code>h</code> is close to zero) range for anything other than very small values of <code>n</code>.
 
Geogebra graphs for the functions defined in this task: [https://www.geogebra.org/m/nygvcs2s sin], [https://www.geogebra.org/m/q3myjbfd cos], [https://www.geogebra.org/m/fsdfzzfs tan], [https://www.geogebra.org/m/n6jctj7c arcsin], [https://www.geogebra.org/m/kkrhjksu arccos], [https://www.geogebra.org/m/ge4qpppf arctan].
 
''Step 3''. Iterate over steps 1 and 2 until you find appropriate Padé Approximants for the task at hand, or conclude that none exist. Assuming the former;
 
''Step 4''. Code in a suitable language (i.e. probably not Quackery - efficiency was not a design criterion for Quackery, the language is intended to be the simplest possible introduction to Concatenative/Stack based programming, and is consequently suitable for hobbyist and educational use only) with any obvious optimisations, and use symmetries and identities of the function to extend the range of arguments that can be passed to it. (Not done here - the code serves solely to demonstrate the one-to-one correspondence between a proof-of-concept coding and the formula returned by Wolfram Alpha.)
 
Note also that the approximation of π/2 is good to 40 decimal places. This is intentional overkill, so that I can be sure that it is not the cause of any inaccuracies. Reducing the size of the numerator and denomination to more sensible values would be part of the optimisation process.
 
<syntaxhighlight lang="quackery"> [ $" bigrat.qky' loadfile ] now!
 
[ 2646693125139304345
1684937174853026414 ] is pi/2 ( --> n/d )
 
[ 2dup
2dup 3 v** 2363 18183 v* v-
2over 5 v** 12671 4363920 v* v+
2swap 1 1
2over 2 v** 445 12122 v* v+
2over 4 v** 601 872784 v* v+
2swap 6 v** 121 16662240 v* v+
v/ ] is sin ( n/d --> n/d )
 
[ 1 1
2over 2 v** 3665 7788 v* v-
2over 4 v** 711 25960 v* v+
2over 6 v** 2923 7850304 v* v-
2swap 1 1
2over 2 v** 229 7788 v* v+
2over 4 v** 1 2360 v* v+
2swap 6 v** 127 39251520 v* v+
v/ ] is cos ( n/d --> n/d )
[ 2dup
2dup 3 v** 5 39 v* v-
2over 5 v** 2 715 v* v+
2over 7 v** 1 135135 v* v-
2swap 1 1
2over 2 v** 6 13 v* v-
2over 4 v** 10 429 v* v+
2swap 6 v** 4 19305 v* v-
v/ ] is tan ( n/d --> n/d )
[ 2dup
2dup 3 v** 2318543 2278617 v* v-
2over 5 v** 12022609 60763120 v* v+
2swap 1 1
2over 2 v** 1798875 1519078 v* v-
2over 4 v** 3891575 12152624 v* v+
2swap 6 v** 4695545 510410208 v* v-
v/ ] is arcsin ( n/d --> n/d )
 
[ pi/2 2swap arcsin v- ] is arccos ( n/d --> n/d )
 
[ 2dup
2dup 3 v** 50 39 v* v+
2over 5 v** 283 715 v* v+
2over 7 v** 256 15015 v* v+
2swap 1 1
2over 2 v** 21 13 v* v+
2over 4 v** 105 143 v* v+
2swap 6 v** 35 429 v* v+
v/ ] is arctan ( n/d --> n/d )
 
[ pi/2 v* 90 1 v/ ] is deg->rad ( n/d --> n/d )
 
[ pi/2 v/ 90 1 v* ] is rad->deg ( n/d --> n/d )
 
say "With an argument of 0.5 radians"
cr cr
$ "0.5" $->v drop
sin
say "Sin approximation: " 20 point$ echo$ cr
say " Actual value: 0.47942553860420300027..."
cr cr
$ "0.5" $->v drop
cos
say "Cos approximation: " 20 point$ echo$ cr
say " Actual value: 0.87758256189037271611..."
cr cr
$ "0.5" $->v drop
tan
say "Tan approximation: " 20 point$ echo$ cr
say " Actual value: 0.54630248984379051325..."
cr cr cr
say "To radians, using approximated values from previous computations"
cr cr
$ "0.47942553860423933121" $->v drop
arcsin
say "Arcsin approximation: " 20 point$ echo$ cr
say " Actual value: 0.5"
cr cr
$ "0.87758256189037190908" $->v drop
arccos
say "Arccos approximation: " 20 point$ echo$ cr
say " Actual value: 0.5"
cr cr
$ "0.54630248984379037103" $->v drop
arctan
say "Arctan approximation: " 20 point$ echo$ cr
say " Actual value: 0.5"
cr cr cr
say "0.5 radians is approx 28.64788976 degrees" cr
cr
$ "28.64788976" $->v drop
deg->rad sin
say "Sin approximation: " 20 point$ echo$ cr
say " Actual value: 0.47942553865718102604..."
cr cr
$ "28.64788976" $->v drop
deg->rad cos
say "Cos approximation: " 20 point$ echo$ cr
say " Actual value: 0.87758256186143068872..."
cr cr
$ "28.64788976" $->v drop
deg->rad tan
say "Tan approximation: " 20 point$ echo$ cr
say " Actual value: 0.54630248992217530618..."
cr cr cr
say "To degrees, using approximated values from previous computations"
cr cr
$ "0.47942553865721735699" $->v drop
arcsin rad->deg
say "Arcsin approximation: " 20 point$ echo$ cr
say " Actual value: 28.64788976..."
cr cr
$ "0.87758256186142988169" $->v drop
arccos rad->deg
say "Arccos approximation: " 20 point$ echo$ cr
say " Actual value: 28.64788976..."
cr cr
$ "0.54630248992217516396" $->v drop
arctan rad->deg
say "Arctan approximation: " 20 point$ echo$ cr
say " Actual value: 28.64788976..."</syntaxhighlight>
 
{{out}}
 
<pre>With an argument of 0.5 radians
 
Sin approximation: 0.47942553860423933121
Actual value: 0.47942553860420300027...
 
Cos approximation: 0.87758256189037190908
Actual value: 0.87758256189037271611...
 
Tan approximation: 0.54630248984379037103
Actual value: 0.54630248984379051325...
 
 
To radians, using approximated values from previous computations
 
Arcsin approximation: 0.49999997409078633068
Actual value: 0.5
 
Arccos approximation: 0.50090902435100642663
Actual value: 0.5
 
Arctan approximation: 0.50000000390223900073
Actual value: 0.5
 
 
0.5 radians is approx 28.64788976 degrees
 
Sin approximation: 0.47942553865721735699
Actual value: 0.47942553865718102604...
 
Cos approximation: 0.87758256186142988169
Actual value: 0.87758256186143068872...
 
Tan approximation: 0.54630248992217516396
Actual value: 0.54630248992217530618...
 
 
To degrees, using approximated values from previous computations
 
Arcsin approximation: 28.64788827551140385372
Actual value: 28.64788976...
 
Arccos approximation: 28.69997301874556855873
Actual value: 28.64788976...
 
Arctan approximation: 28.64788998358182581534
Actual value: 28.64788976...
Stack empty.
</pre>
 
=={{header|R}}==
<langsyntaxhighlight Rlang="r">deg <- function(radians) 180*radians/pi
rad <- function(degrees) degrees*pi/180
sind <- function(ang) sin(rad(ang))
Line 2,995 ⟶ 4,525:
print( c( asin(S), asind(S) ) )
print( c( acos(C), acosd(C) ) )
print( c( atan(T), atand(T) ) )</langsyntaxhighlight>
 
=={{header|Racket}}==
<langsyntaxhighlight Racketlang="racket">#lang racket
(define radians (/ pi 4))
(define degrees 45)
Line 3,015 ⟶ 4,545:
(define arctan (atan (tan radians)))
(display (format "~a ~a" arctan (* arctan (/ 180 pi))))</langsyntaxhighlight>
 
=={{header|Raku}}==
(formerly Perl 6) Borrow the degree to radian routine from [https://rosettacode.org/wiki/Length_of_an_arc_between_two_angles#Raku here].
{{works with|Rakudo|2020.12}}
<syntaxhighlight lang="raku" line># 20210212 Updated Raku programming solution
 
sub postfix:<°> (\ᵒ) { ᵒ × τ / 360 }
 
sub postfix:<㎭🡆°> (\ᶜ) { ᶜ / π × 180 }
 
say sin π/3 ;
say sin 60° ;
 
say cos π/4 ;
say cos 45° ;
 
say tan π/6 ;
say tan 30° ;
 
( asin(3.sqrt/2), acos(1/sqrt 2), atan(1/sqrt 3) )».&{ .say and .㎭🡆°.say }</syntaxhighlight>
{{out}}
<pre>
0.8660254037844386
0.8660254037844386
0.7071067811865476
0.7071067811865476
0.5773502691896257
0.5773502691896257
1.0471975511965976
60
0.7853981633974484
45.00000000000001
0.5235987755982989
30.000000000000004
</pre>
 
=={{header|RapidQ}}==
<langsyntaxhighlight RapidQlang="rapidq">$APPTYPE CONSOLE
$TYPECHECK ON
 
Line 3,050 ⟶ 4,615:
pause("Press any key to continue.")
 
END 'MAIN</langsyntaxhighlight>
 
=={{header|Rapira}}==
<syntaxhighlight lang="rapira">output: sin(pi/2), " ", cos(0), " ", tg(pi/4)</syntaxhighlight>
 
=={{header|REBOL}}==
<langsyntaxhighlight REBOLlang="rebol">REBOL [
Title: "Trigonometric Functions"
Author: oofoe
Date: 2009-12-07
URL: http://rosettacode.org/wiki/Trigonometric_Functions
]
Line 3,081 ⟶ 4,647:
 
arctan: arctangent tangent degrees
print [d2r arctan arctan]</langsyntaxhighlight>
 
Output:
 
{{out}}
<pre>0.707106781186547 0.707106781186547
0.707106781186548 0.707106781186548
Line 3,093 ⟶ 4,658:
 
=={{header|REXX}}==
The REXX language doesn't have any trig functions (or for that matter, &nbsp; a square root [SQRT] function), &nbsp; so if higher math
<br>functions are wanted, you'll have to roll your own. &nbsp; Some of the normal/regular trigonometric functions are included here.
<lang rexx> ┌──────────────────────────────────────────────────────────────────────────┐
│ One common method that ensures enough accuracy in REXX is specifying │
│ more precision (via NUMERIC DIGITS nnn) than is needed, and then │
│ displaying the number of digits that are desired, or the number(s) │
│ could be re-normalized using the FORMAT bifBIF. │
│ │
│ The technique used (below) is to set the numeric digits ten higher │
│ than the desired digits, as specified by the SHOWDIGS variable. │
└──────────────────────────────────────────────────────────────────────────┘</lang>
Most math (POW, EXP, LOG, LN, GAMMA, etc.), trigonometric, and hyperbolic functions need only five extra digits, but ten
<br>extra digits is safer in case the argument is close to an asymptotic point or a multiple or fractional part of pi or somesuch.
<br>It should also be noted that both the '''pi''' and '''e''' constants have only around 77 decimal digits as included here, if more
<br>precision is needed, those constants should be extended. Both '''pi''' and '''e''' could've been shown with more precision,
<br>but having large precision numbers would add to this REXX program's length. If anybody wishes to see this REXX version of
<br>extended digits for '''pi''' or '''e''', I could extend them to any almost any precision (as a REXX constant). Normally, a REXX
<br>(external) subroutine is used for such purposes so as to not make the program using the constant unwieldly large.
<lang rexx>/*REXX program demonstrates some common trig functions (30 digits shown)*/
showdigs=30 /*show only 30 digits of number. */
numeric digits showdigs+10 /*DIGITS default is 9, but use */
/*extra digs to prevent rounding.*/
say 'Using' showdigs 'decimal digits precision.'; say
 
It should also be noted that both the &nbsp; '''pi''' &nbsp; and &nbsp; '''e''' &nbsp; constants have only around 77 decimal digits as included here, if more
do j=-180 to +180 by 15 /*let's just do a half-Monty. */
<br>precision is needed, those constants should be extended. &nbsp; Both &nbsp; '''pi''' &nbsp; and &nbsp; '''e''' &nbsp; could've been shown with more precision,
stuff = right(j,4) 'degrees, rads='show( d2r(j)),
<br>but having large precision numbers would add to this REXX program's length. &nbsp; If anybody wishes to see this REXX version
' sin='show(sinD(j)),
<br>of extended digits for &nbsp; '''pi'''&nbsp; or &nbsp; '''e''', &nbsp; they could be extended to any almost any precision &nbsp; (as a REXX constant). &nbsp; Normally,
' cos='show(cosD(J))
<br>a REXX (external) subroutine is used for such purposes so as to not make the program using the constant unwieldy large.
/*don't let TAN go postal.*/
<syntaxhighlight lang="rexx">/*REXX program demonstrates some common trig functions (30 decimal digits are shown).*/
if abs(j)\==90 then stuff=stuff ' tan='show(tanD(j))
showdigs= 25 /*show only 25 digits of number. */
say stuff
numeric digits showdigs + 10 /*DIGITS default is 9, but use */
end /*j*/
/*extra digs to prevent rounding.*/
 
say 'Using' showdigs 'decimal digits precision.' /*show # decimal digs being used.*/
say; do k=-1 to +1 by 1/2 /*keep the Arc-functions happy. */
say
say right(k,4) 'radians, degs='show( r2d(k)),
do j=-180 to +180 by 15 ' Acos= /*let'show(Acos(k)),s just do a half─Monty. */
stuff = right(j, 4) 'degrees, rads=' show( ' Asin='show(Asind2r(kj) ) ,
' Atan sin=' show(Atan sinD(kj) ) ,
' cos=' show( cosD(J) )
end /*k*/
exit /*stickdon't alet fork inTANGENT it, we'rego donepostal. */
if abs(j)\==90 then stuff=stuff ' tan=' show( tanD(j) )
/*──────────────────────────────────subroutines─────────────────────────*/
say stuff
end /*j*/
say
do k=-1 to +1 by 1/2 /*keep the Arc─functions happy. */
say right(k, 4) 'radians, degs=' show( r2d(k) ) ,
' Acos=' show( Acos(k) ) ,
' Asin=' show( Asin(k) ) ,
' Atan=' show( Atan(k) )
end /*k*/
exit /*stick a fork in it, we're done.*/
/*──────────────────────────────────────────────────────────────────────────────────────*/
Asin: procedure; parse arg x 1 z 1 o 1 p; a=abs(x); aa=a*a
if a>1 then call $81rAsinErr -1,1,x,"ASIN" /*X argargument is out of range. */
if a >= sqrt(2) * .5 then return sign(x) * acos( sqrt(1 - aa), '-ASIN')
do j=2 by 2 until p=z; p=z; o= o * aa * (j-1) / j; z= z +o / (j+1); end
return z /* [↑] compute until no noise. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
Acos: procedure; parse arg x; if x<-1 | x>1 then call AcosErr; return pi()*.5 - Asin(x)
AcosD: return r2d( Acos( arg(1) ) )
AsinD: return r2d( Asin( arg(1) ) )
cosD: return cos( d2r( arg(1) ) )
sinD: return sin( d2r( d2d( arg(1) ) ) )
tan: procedure; parse arg x; _= cos(x); if _=0 then call tanErr; return sin(x) / _
tanD: return tan( d2r( arg(1) ) )
d2d: return arg(1) // 360 /*normalize degrees ──► a unit circle*/
d2r: return r2r( d2d( arg(1) )*pi() / 180) /*convert degrees ──► radians. */
r2d: return d2d( ( arg(1) * 180 / pi() ) ) /*convert radians ──► degrees. */
r2r: return arg(1) // (pi() *2) /*normalize radians ──► a unit circle*/
show: return left( left('', arg(1) >= 0)format( arg(1), , showdigs) / 1, showdigs)
tellErr: say; say '*** error! ***'; say; say arg(1); say; exit 13
tanErr: call tellErr 'tan(' || x") causes division by zero, X=" || x
AsinErr: call tellErr 'Asin(x), X must be in the range of -1 ──► +1, X=' || x
AcosErr: call tellErr 'Acos(x), X must be in the range of -1 ──► +1, X=' || x
/*──────────────────────────────────────────────────────────────────────────────────────*/
Atan: procedure; parse arg x; if abs(x)=1 then return pi() * .25 * sign(x)
return Asin(x / sqrt(1 + x*x) )
/*──────────────────────────────────────────────────────────────────────────────────────*/
cos: procedure; parse arg x; x= r2r(x); if x=0 then return 1; a= abs(x)
numeric fuzz min(6, digits() - 3); if a=pi then return -1; pih= pi * .5
if a=pih | a=pih*3 then return 0; pit= pi/3; if a=pit then return .5
if a=pit + pit then return -.5; return .sinCos(1, -1)
/*──────────────────────────────────────────────────────────────────────────────────────*/
sin: procedure; arg x;x=r2r(x);if x=0 then return 0;numeric fuzz min(5,max(1,digits()-3))
if x=pi*.5 then return 1; if x==pi * 1.5 then return -1
if abs(x)=pi then return 0; return .sinCos(x,1)
/*──────────────────────────────────────────────────────────────────────────────────────*/
.sinCos: parse arg z 1 _,i; q= x*x
do k=2 by 2 until p=z; p= z; _= - _ * q / (k * (k+i) ); z= z + _; end
return z
/*──────────────────────────────────────────────────────────────────────────────────────*/
sqrt: procedure; parse arg x; if x=0 then return 0; d=digits(); i=; m.=9; h= d+6
numeric digits; numeric form; if x<0 then do; x= -x; i= 'i'; end
parse value format(x, 2, 1, , 0) 'E0' with g 'E' _ .; g= g *.5'e'_ % 2
do j=0 while h>9; m.j=h; h= h % 2 + 1; end /*j*/
do k=j+5 to 0 by -1; numeric digits m.k; g= (g+x/g) * .5; end /*k*/
numeric digits d; return (g/1)i /*make complex if X < 0.*/
/*──────────────────────────────────────────────────────────────────────────────────────*/
e: e = 2.7182818284590452353602874713526624977572470936999595749669676277240766303535
return e /*Note: the actual E subroutine returns E's accuracy that */
/*matches the current NUMERIC DIGITS, up to 1 million digits.*/
/*──────────────────────────────────────────────────────────────────────────────────────*/
exp: procedure; parse arg x; ix=x%1; if abs(x-ix)>.5 then ix= ix + sign(x); x=x - ix
z=1; _=1; w=z; do j=1; _= _*x/j; z= (z+_) / 1; if z==w then leave; w=z; end
if z\==0 then z= e()**ix * z; return z
/*──────────────────────────────────────────────────────────────────────────────────────*/
pi: pi= 3.1415926535897932384626433832795028841971693993751058209749445923078164062862
return pi /*Note: the actual PI subroutine returns PI's accuracy that */
/*matches the current NUMERIC DIGITS, up to 1 million digits.*/
/*John Machin's formula is used for calculating more digits. */</syntaxhighlight>
Programming note:
╔═════════════════════════════════════════════════════════════════════════════╗
║ Functions that are not included here are (among others): ║
║ ║
║ some of the usual higher-math functions normally associated with trig ║
║ functions: POW, GAMMA, LGGAMMA, ERF, ERFC, ROOT, ATAN2, ║
║ LOG (LN), LOG2, LOG10, and all of the ║
║ hyperbolic trigonometric functions and their inverses (too many to list ║
║ here), ║
║ angle conversions/normalizations: degrees/radians/grads/mils: ║
║ a circle ≡ 2 pi radians ≡ 360 degrees ≡ 400 grads ≡ 6400 mils. ║
║ ║
║ Some of the other trigonometric functions are (hyphens added intentionally):║
║ ║
║ CHORD ║
║ COT (co-tangent) ║
║ CSC (co-secant) ║
║ CVC (co-versed cosine) ║
║ CVS (co-versed sine) ║
║ CXS (co-exsecant) ║
║ HAC (haver-cosine) ║
║ HAV (haver-sine ║
║ SEC (secant) ║
║ VCS (versed cosine or ver-cosine) ║
║ VSN (versed sine or ver-sine) ║
║ XCS (ex-secant) ║
║ COS/SIN/TAN cardinal (damped COS/SIN/TAN functions) ║
║ COS/SIN integral ║
║ ║
║ and all pertinent inverses of the above functions (AVSN, ACVS, ···). ║
╚═════════════════════════════════════════════════════════════════════════════╝
{{out|output}}
 
(Shown at three-quarter size.)
Atan: procedure; parse arg x; if abs(x)=1 then return pi() * .25 * sign(x)
<pre style="font-size:75%>
return Asin(x/sqrt(1+x*x) )
Using 25 decimal digits precision.
 
-180 degrees, rads= -3.1415926535897932384626 sin= 0 cos= -1 tan= 0
cos: procedure; parse arg x; x=r2r(x); a=abs(x); numeric fuzz min(9,digits()-9)
-165 degrees, rads= -2.8797932657906438019240 sin= -0.2588190451025207623488 cos= -0.9659258262890682867497 tan= 0.2679491924311227064725
if a=pi() then return -1; if a=pi()*.5 | a=pi()*2 then return 0
-150 degrees, rads= -2.6179938779914943653855 sin= -0.5 cos= -0.8660254037844386467637 tan= 0.5773502691896257645091
pi3=pi()/3; if a=pi3 then return .5; if a=2*pi3 then return -.5
-135 degrees, rads= -2.3561944901923449288469 sin= -0.7071067811865475244008 cos= -0.7071067811865475244008 tan= 1
return .sinCos(1,1,-1)
-120 degrees, rads= -2.0943951023931954923084 sin= -0.8660254037844386467637 cos= -0.5 tan= 1.7320508075688772935274
-105 degrees, rads= -1.8325957145940460557698 sin= -0.9659258262890682867497 cos= -0.2588190451025207623488 tan= 3.7320508075688772935274
-90 degrees, rads= -1.5707963267948966192313 sin= -1 cos= 0
-75 degrees, rads= -1.3089969389957471826927 sin= -0.9659258262890682867497 cos= 0.2588190451025207623488 tan= -3.7320508075688772935274
-60 degrees, rads= -1.0471975511965977461542 sin= -0.8660254037844386467637 cos= 0.5 tan= -1.7320508075688772935274
-45 degrees, rads= -0.7853981633974483096156 sin= -0.7071067811865475244008 cos= 0.7071067811865475244008 tan= -1
-30 degrees, rads= -0.5235987755982988730771 sin= -0.5 cos= 0.8660254037844386467637 tan= -0.5773502691896257645091
-15 degrees, rads= -0.2617993877991494365385 sin= -0.2588190451025207623488 cos= 0.9659258262890682867497 tan= -0.2679491924311227064725
0 degrees, rads= 0 sin= 0 cos= 1 tan= 0
15 degrees, rads= 0.2617993877991494365385 sin= 0.2588190451025207623488 cos= 0.9659258262890682867497 tan= 0.2679491924311227064725
30 degrees, rads= 0.5235987755982988730771 sin= 0.5 cos= 0.8660254037844386467637 tan= 0.5773502691896257645091
45 degrees, rads= 0.7853981633974483096156 sin= 0.7071067811865475244008 cos= 0.7071067811865475244008 tan= 1
60 degrees, rads= 1.0471975511965977461542 sin= 0.8660254037844386467637 cos= 0.5 tan= 1.7320508075688772935274
75 degrees, rads= 1.3089969389957471826927 sin= 0.9659258262890682867497 cos= 0.2588190451025207623488 tan= 3.7320508075688772935274
90 degrees, rads= 1.5707963267948966192313 sin= 1 cos= 0
105 degrees, rads= 1.8325957145940460557698 sin= 0.9659258262890682867497 cos= -0.2588190451025207623488 tan= -3.7320508075688772935274
120 degrees, rads= 2.0943951023931954923084 sin= 0.8660254037844386467637 cos= -0.5 tan= -1.7320508075688772935274
135 degrees, rads= 2.3561944901923449288469 sin= 0.7071067811865475244008 cos= -0.7071067811865475244008 tan= -1
150 degrees, rads= 2.6179938779914943653855 sin= 0.5 cos= -0.8660254037844386467637 tan= -0.5773502691896257645091
165 degrees, rads= 2.8797932657906438019240 sin= 0.2588190451025207623488 cos= -0.9659258262890682867497 tan= -0.2679491924311227064725
180 degrees, rads= 3.1415926535897932384626 sin= 0 cos= -1 tan= 0
 
-1 radians, degs= -57.295779513082320876798 Acos= 3.1415926535897932384626 Asin= -1.5707963267948966192313 Atan= -0.7853981633974483096156
sin: procedure; parse arg x; x=r2r(x); numeric fuzz $fuzz(5, 3)
-0.5 radians, degs= -28.647889756541160438399 Acos= 2.0943951023931954923084 Asin= -0.5235987755982988730771 Atan= -0.4636476090008061162142
pi=pi(); if x=pi*.5 then return 1; if x==pi*1.5 then return -1
0 radians, degs= 0 Acos= 1.5707963267948966192313 Asin= 0 Atan= 0
if abs(x)=pi | x=0 then return 0; return .sinCos(x, x, +1)
0.5 radians, degs= 28.647889756541160438399 Acos= 1.0471975511965977461542 Asin= 0.5235987755982988730771 Atan= 0.4636476090008061162142
1.0 radians, degs= 57.295779513082320876798 Acos= 0 Asin= 1.5707963267948966192313 Atan= 0.7853981633974483096156
</pre>
 
=={{header|Ring}}==
.sinCos: parse arg z,_,i; x=x*x
<syntaxhighlight lang="ring">
do k=2 by 2 until p=z; p=z; _=-_*x/(k*(k+i)); z=z+_; end /*k*/
pi = 3.14
return z
decimals(8)
see "sin(pi/4.0) = " + sin(pi/4.0) + nl
see "cos(pi/4.0) = " + cos(pi/4.0) + nl
see "tan(pi/4.0) = " + tan(pi/4.0)+ nl
see "asin(sin(pi/4.0)) = " + asin(sin(pi/4.0)) + nl
see "acos(cos(pi/4.0)) = " + acos(cos(pi/4.0)) + nl
see "atan(tan(pi/4.0)) = " + atan(tan(pi/4.0)) + nl
see "atan2(3,4) = " + atan2(3,4) + nl
</syntaxhighlight>
 
=={{header|RPL}}==
sqrt: procedure; parse arg x,i; if x=0 then return 0; d=digits(); m.=11
RPL has somewhere a system flag that defines if arguments passed to trigonometric functions are in degrees or radians. The words <code>DEG</code> and <code>RAD</code> set the flag appropriately.
if x<0 then i='i'; numeric digits 11; numeric form; p=d+d%4+2
We can therefore answer the task so:
parse value format(x,2,1,,0) 'E0' with g 'E' _ .; g=g*.5'E'_%2
π 4 / →NUM 'XRAD' STO
do j=0 while p>9; m.j=p; p=p%2+1; end /*j*/
45 'XDEG' STO
do k=j+5 to 0 by -1; if m.k>11 then numeric digits m.k
XRAD RAD SIN XDEG DEG SIN
g=.5*(g+x/g); end /*k*/; numeric digits d; return g/1
which will return <code>.707106781187</code> 2 times.
 
Another way is to stay in the same trigonometric mode and use <code>D→R</code> or <code>R→D</code> conversion words. This is the way used below:
e: return,
RAD
2.7182818284590452353602874713526624977572470936999595749669676277240766303535
π 4 / →NUM SIN 45 D→R SIN
/*Note: the actual E subroutine returns E's accuracy that */
π 3 / →NUM COS 60 D→R COS
/*matches the current NUMERIC DIGITS, up to 1 million digits.*/
π 6 / →NUM TAN 30 D→R TAN
/*If more than 1 million digits are required, be patient. */
{{out}}
 
exp: procedure; parse arg x; ix=x%1; if abs(x-ix)>.5 then ix=ix+sign(x); x=x-ix
z=1; _=1; w=z; do j=1; _=_*x/j; z=(z+_)/1; if z==w then leave; w=z; end
if z\==0 then z=e()**ix*z; return z
 
pi: return, /*a bit of overkill, but hey !! */
3.1415926535897932384626433832795028841971693993751058209749445923078164062862
/*Note: the actual PI subroutine returns PI's accuracy that */
/*matches the current NUMERIC DIGITS, up to 1 million digits.*/
/*John Machin's formula is used for calculating more digits. */
/*If more than 1 million digits are required, be patient. */
 
$fuzz: return min(arg(1), max(1, digits() - arg(2) ) )
Acos: procedure; parse arg x; if x<-1|x>1 then call AcosErr; return .5*pi()-Asin(x)
AcosD: return r2d(Acos(arg(1)))
AsinD: return r2d(Asin(arg(1)))
cosD: return cos(d2r(arg(1)))
sinD: return sin(d2r(d2d(arg(1))))
tan: procedure; parse arg x; _=cos(x); if _=0 then call tanErr; return sin(x)/_
tanD: return tan(d2r(arg(1)))
d2d: return arg(1) // 360 /*normalize degrees►1 unit circle. */
d2r: return r2r(d2d(arg(1))*pi() /180) /*convert degrees ──► radians. */
r2d: return d2d((arg(1)*180 /pi())) /*convert radians ──► degrees. */
r2r: return arg(1) // (pi()*2) /*normalize radians ──►a unit circle*/
show: return left(left('',arg(1)>=0)format(arg(1),,showdigs)/1,showdigs)
tellErr: say; say '*** error! ***'; say; say arg(1); say; exit 13
tanErr: call tellErr 'tan('||x") causes division by zero, X="||x
AsinErr: call tellErr 'Asin(x), X must be in the range of -1 ──► +1, X='||x
AcosErr: call tellErr 'Acos(x), X must be in the range of -1 ──► +1, X='||x
sqrtErr: call tellErr "sqrt(x), X can't be negative, X="||x
/* ┌───────────────────────────────────────────────────────────────┐
│ Not included here are: (among others): │
│ some of the usual higher-math functions normally associated │
│ with trig functions: POW, GAMMA, LGGAMMA, ERF, ERFC, ROOT, │
│ LOG (LN), LOG2, LOG10, ATAN2, │
│ all of the hyperbolic trig functions and their inverses, │
│ (too many to name here). │
│ Angle conversions/normalizations: degrees/radians/grads/mils │
│ [a circle = 2 pi radians, 360 degrees, 400 grads, 6400 mils].│
│ Some of the other trig functions (hypens added intentially): │
│ CHORD │
│ COT (co-tangent) │
│ CSC (co-secant) │
│ CVC (co-versed cosine) │
│ CVS (co-versed sine) │
│ CXS (co-exsecant) │
│ HAC (haver-cosine) │
│ HAV (haver-sine │
│ SEC (secant) │
│ VCS (versed cosine or vercosine) │
│ VSN (versed sine or versine) │
│ XCS (exsecant) │
│ COS/SIN/TAN cardinal (damped COS/SIN/TAN function) │
│ COS/SIN integral │
│ and all pertinent of the above's inverses (AVSN, ACVS...) │
└───────────────────────────────────────────────────────────────┘ */</lang>
'''output'''
<pre>
6: .707106781187
Using 30 decimal digits precision.
5: .707106781187
 
4: .499999999997
-180 degrees, rads=-3.141592653589793238462643383 sin= 0 cos=-1 tan= 0
3: .499999999997
-165 degrees, rads=-2.879793265790643801924089768 sin=-0.258819045102520762348898837 cos=-0.965925826289068286749743199 tan= 0.267949192431122706472553658
2: .577350269189
-150 degrees, rads=-2.617993877991494365385536152 sin=-0.5 cos=-0.866025403784438646763723170 tan= 0.577350269189625764509148780
1: .577350269189
-135 degrees, rads=-2.356194490192344928846982537 sin=-0.707106781186547524400844362 cos=-0.707106781186547524400844362 tan= 1
-120 degrees, rads=-2.094395102393195492308428922 sin=-0.866025403784438646763723170 cos=-0.5 tan= 1.732050807568877293527446341
-105 degrees, rads=-1.832595714594046055769875306 sin=-0.965925826289068286749743199 cos=-0.258819045102520762348898837 tan= 3.732050807568877293527446341
-90 degrees, rads=-1.570796326794896619231321691 sin=-1 cos= 0
-75 degrees, rads=-1.308996938995747182692768076 sin=-0.965925826289068286749743199 cos= 0.258819045102520762348898837 tan=-3.732050807568877293527446341
-60 degrees, rads=-1.047197551196597746154214461 sin=-0.866025403784438646763723170 cos= 0.5 tan=-1.732050807568877293527446341
-45 degrees, rads=-0.785398163397448309615660845 sin=-0.707106781186547524400844362 cos= 0.707106781186547524400844362 tan=-1
-30 degrees, rads=-0.523598775598298873077107230 sin=-0.5 cos= 0.866025403784438646763723170 tan=-0.577350269189625764509148780
-15 degrees, rads=-0.261799387799149436538553615 sin=-0.258819045102520762348898837 cos= 0.965925826289068286749743199 tan=-0.267949192431122706472553658
0 degrees, rads= 0 sin= 0 cos= 1 tan= 0
15 degrees, rads= 0.261799387799149436538553615 sin= 0.258819045102520762348898837 cos= 0.965925826289068286749743199 tan= 0.267949192431122706472553658
30 degrees, rads= 0.523598775598298873077107230 sin= 0.5 cos= 0.866025403784438646763723170 tan= 0.577350269189625764509148780
45 degrees, rads= 0.785398163397448309615660845 sin= 0.707106781186547524400844362 cos= 0.707106781186547524400844362 tan= 1
60 degrees, rads= 1.047197551196597746154214461 sin= 0.866025403784438646763723170 cos= 0.5 tan= 1.732050807568877293527446341
75 degrees, rads= 1.308996938995747182692768076 sin= 0.965925826289068286749743199 cos= 0.258819045102520762348898837 tan= 3.732050807568877293527446341
90 degrees, rads= 1.570796326794896619231321691 sin= 1 cos= 0
105 degrees, rads= 1.832595714594046055769875306 sin= 0.965925826289068286749743199 cos=-0.258819045102520762348898837 tan=-3.732050807568877293527446341
120 degrees, rads= 2.094395102393195492308428922 sin= 0.866025403784438646763723170 cos=-0.5 tan=-1.732050807568877293527446341
135 degrees, rads= 2.356194490192344928846982537 sin= 0.707106781186547524400844362 cos=-0.707106781186547524400844362 tan=-1
150 degrees, rads= 2.617993877991494365385536152 sin= 0.5 cos=-0.866025403784438646763723170 tan=-0.577350269189625764509148780
165 degrees, rads= 2.879793265790643801924089768 sin= 0.258819045102520762348898837 cos=-0.965925826289068286749743199 tan=-0.267949192431122706472553658
180 degrees, rads= 3.141592653589793238462643383 sin= 0 cos=-1 tan= 0
 
-1 radians, degs=-57.29577951308232087679815481 Acos= 3.141592653589793238462643383 Asin=-1.570796326794896619231321691 Atan=-0.785398163397448309615660845
-0.5 radians, degs=-28.64788975654116043839907740 Acos= 2.094395102393195492308428922 Asin=-0.523598775598298873077107230 Atan=-0.463647609000806116214256231
0 radians, degs= 0 Acos= 1.570796326794896619231321691 Asin= 0 Atan= 0
0.5 radians, degs= 28.64788975654116043839907740 Acos= 1.047197551196597746154214461 Asin= 0.523598775598298873077107230 Atan= 0.463647609000806116214256231
1.0 radians, degs= 57.29577951308232087679815481 Acos= 0 Asin= 1.570796326794896619231321691 Atan= 0.785398163397448309615660845
</pre>
As we have now in the stack the 6 values to be inversed, let's call the required functions in reverse order. The <code>6 ROLLD</code> instruction pushes the number from level 1 to level 6 of the stack, making thus the next number available for inversion.
 
ATAN R→D 6 ROLLD
ATAN 6 ROLLD
ACOS R→D 6 ROLLD
ACOS 6 ROLLD
ASIN R→D 6 ROLLD
ASIN 6 ROLLD
{{out}}
<pre>
6: .785398163397
5: 45
4: 1.0471975512
3: 60.0000000002
2: .523598775598
1: 30
</pre>
Calculations made with a HP-28S. Emulator has better precision and returns 60 for <code>60 D→R COS ACOS R→D</code>
=={{header|Ruby}}==
 
Ruby's <tt>Math</tt> module contains all six functions. The functions all accept radians only, so conversion is necessary when dealing with degrees.
 
<langsyntaxhighlight lang="ruby">radians = Math::PI / 4
degrees = 45.0
 
Line 3,290 ⟶ 4,908:
#arctangent
arctan = Math.atan(Math.tan(radians))
puts "#{arctan} #{rad2deg(arctan)}"</langsyntaxhighlight>
 
{{out}}
Line 3,307 ⟶ 4,925:
{{trans|bc}}
{{works with|Ruby|1.9}}
<langsyntaxhighlight lang="ruby">require 'bigdecimal' # BigDecimal
require 'bigdecimal/math' # BigMath
 
Line 3,369 ⟶ 4,987:
"\n atan(sqrt(3)) = ",
f[ atan(sqrt(b3, prec), prec) / degrees ],
"\n")</langsyntaxhighlight>
 
{{out}}
Line 3,390 ⟶ 5,008:
 
=={{header|Run BASIC}}==
<syntaxhighlight lang="runbasic">' Find these three ratios: Sine, Cosine, Tangent. (These ratios have NO units.)
<lang runbasic>deg = 45.0
' Run BASIC works in radians. Convert deg and rad as shown.
d2r = ACS(-1)/180
rad = deg*d2r
r2d = 180/ACS(-1)
 
deg = 45.0
print "Sine: ";SIN(rad);" ";SIN(deg*d2r)
' Run BASIC works in radians; so, first convert deg to rad as shown in next line.
print "Cosine: ";COS(rad);" ";COS(deg*d2r)
rad = deg * (atn(1)/45)
print "Tangent: ";TAN(rad);" ";TAN(deg*d2r)
print "Ratios for a "; deg; " degree angle, (or "; rad; " radian angle.)"
print
print "ArcsineSine: ";ASN(SIN(rad));" radians, (or ";ASN( SIN(deg*d2rrad))*r2d;" degrees)"
print "ArccosineCosine: ";ACS(COS(rad));" radians, (or ";ACS( COS(deg*d2rrad))*r2d;" degrees)"
print "Tangent: "; TAN(rad)
print "Arctangent: ";ATN(TAN(rad));" radians, (or ";ATN(TAN(deg*d2r))*r2d;" degrees)"</lang>Output:
<pre>Sine: 0.707106781 0.707106781
Cosine: 0.707106781 0.707106781
Tangent: 1.0 1.0
 
print "Inverse Functions - - (Using above ratios)"
' Now, use those ratios to work backwards to show their original angle in radians.
' Also, use this: rad / (atn(1)/45) = deg (To change radians to degrees.)
print "Arcsine: "; ASN(SIN(rad)); " radians, (or "; ASN(SIN(rad))/(atn(1)/45); " degrees)"
print "Arccosine: "; ACS(COS(rad)); " radians, (or "; ACS(COS(rad))/(atn(1)/45); " degrees)"
print "Arctangent: "; ATN(TAN(rad)); " radians, (or "; ATN(TAN(rad))/(atn(1)/45); " degrees)"
 
' This code also works in Liberty BASIC.
' The above (atn(1)/45) = approx .01745329252</syntaxhighlight>
{{out}}
<pre>Ratios for a 45.0 degree angle, (or 0.785398163 radian angle.)
Sine: 0.707106781
Cosine: 0.707106781
Tangent: 1.0
Inverse Functions - - (Using above ratios)
Arcsine: 0.785398163 radians, (or 45.0 degrees)
Arccosine: 0.785398163 radians, (or 45.0 degrees)
Arctangent: 0.785398163 radians, (or 45.0 degrees)</pre>
 
=={{header|Rust}}==
{{trans|Perl}}
 
<syntaxhighlight lang="rust">// 20210221 Rust programming solution
 
use std::f64::consts::PI;
 
fn main() {
let angle_radians: f64 = PI/4.0;
let angle_degrees: f64 = 45.0;
 
println!("{} {}", angle_radians.sin(), angle_degrees.to_radians().sin());
println!("{} {}", angle_radians.cos(), angle_degrees.to_radians().cos());
println!("{} {}", angle_radians.tan(), angle_degrees.to_radians().tan());
 
let asin = angle_radians.sin().asin();
println!("{} {}", asin, asin.to_degrees());
let acos = angle_radians.cos().acos();
println!("{} {}", acos, acos.to_degrees());
let atan = angle_radians.tan().atan();
println!("{} {}", atan, atan.to_degrees());
}</syntaxhighlight>
{{out}}
<pre>
0.7071067811865475 0.7071067811865475
0.7071067811865476 0.7071067811865476
0.9999999999999999 0.9999999999999999
0.7853981633974482 44.99999999999999
0.7853981633974483 45
0.7853981633974483 45
</pre>
 
=={{header|SAS}}==
<langsyntaxhighlight lang="sas">data _null_;
pi = 4*atan(1);
deg = 30;
Line 3,442 ⟶ 5,100:
b=atan(x)/k;
put a b;
run;</langsyntaxhighlight>
 
=={{header|SchemeScala}}==
{{libheader|Scala}}<syntaxhighlight lang="scala">import scala.math._
 
object Gonio extends App {
<lang scheme>(define pi (* 4 (atan 1)))
//Pi / 4 rad is 45 degrees. All answers should be the same.
val radians = Pi / 4
val degrees = 45.0
 
println(s"${sin(radians)} ${sin(toRadians(degrees))}")
//cosine
println(s"${cos(radians)} ${cos(toRadians(degrees))}")
//tangent
println(s"${tan(radians)} ${tan(toRadians(degrees))}")
//arcsine
val bgsin = asin(sin(radians))
println(s"$bgsin ${toDegrees(bgsin)}")
val bgcos = acos(cos(radians))
println(s"$bgcos ${toDegrees(bgcos)}")
//arctangent
val bgtan = atan(tan(radians))
println(s"$bgtan ${toDegrees(bgtan)}")
val bgtan2 = atan2(1, 1)
println(s"$bgtan ${toDegrees(bgtan)}")
}</syntaxhighlight>
 
=={{header|Scheme}}==
<syntaxhighlight lang="scheme">(define pi (* 4 (atan 1)))
 
(define radians (/ pi 4))
Line 3,482 ⟶ 5,164:
(display " ")
(display (* arctan (/ 180 pi)))
(newline)</langsyntaxhighlight>
 
=={{header|Seed7}}==
Line 3,494 ⟶ 5,176:
[http://seed7.sourceforge.net/libraries/math.htm#atan%28ref_float%29 atan].
 
<langsyntaxhighlight lang="seed7">$ include "seed7_05.s7i";
include "float.s7i";
include "math.s7i";
Line 3,510 ⟶ 5,192:
writeln("arccosine: " <& acos(0.70710677) digits 5 <& acos(0.70710677) * 180.0 / PI digits 5 lpad 9);
writeln("arctangent: " <& atan(1.0) digits 5 <& atan(1.0) * 180.0 / PI digits 5 lpad 9);
end func;</langsyntaxhighlight>
 
{{out}}
Output:
<pre>
radians degrees
Line 3,522 ⟶ 5,204:
arctangent: 0.78540 45.00000
</pre>
 
=={{header|Sidef}}==
<syntaxhighlight lang="ruby">var angle_deg = 45;
var angle_rad = Num.pi/4;
 
for arr in [
[sin(angle_rad), sin(deg2rad(angle_deg))],
[cos(angle_rad), cos(deg2rad(angle_deg))],
[tan(angle_rad), tan(deg2rad(angle_deg))],
[cot(angle_rad), cot(deg2rad(angle_deg))],
] {
say arr.join(" ");
}
 
for n in [
asin(sin(angle_rad)),
acos(cos(angle_rad)),
atan(tan(angle_rad)),
acot(cot(angle_rad)),
] {
say [n, rad2deg(n)].join(' ');
}</syntaxhighlight>
{{out}}
<pre>
0.707106781186547 0.707106781186547
0.707106781186548 0.707106781186548
1 1
1 1
0.785398163397448 45
0.785398163397448 45
0.785398163397448 45
0.785398163397448 45
</pre>
 
=={{header|SparForte}}==
As a structured script.
<syntaxhighlight lang="ada">#!/usr/local/bin/spar
pragma annotate( summary, "trig" )
@( description, "If your language has a library or built-in " )
@( description, "functions for trigonometry, show examples of: ")
@( description, "sine, cosine, tangent, inverses (of the above) " )
@( description, "using the same angle in radians and degrees." )
@( description, "" )
@( description, "For the non-inverse functions, each radian/" )
@( description, "degree pair should use arguments that evaluate to " )
@( description, "the same angle (that is, it's not necessary to " )
@( description, "use the same angle for all three regular " )
@( description, "functions as long as the two sine calls use the " )
@( description, "same angle). For the inverse functions, use " )
@( description, "the same number and convert its answer to radians " )
@( description, "and degrees." )
@( category, "tutorials" )
@( author, "Ken O. Burtch" )
@( see_also, "http://rosettacode.org/wiki/Trigonometric_functions" );
pragma license( unrestricted );
 
pragma software_model( nonstandard );
pragma restriction( no_external_commands );
 
procedure trig is
degrees_cycle : constant float := 360.0;
radians_cycle : constant float := 2.0 * float( numerics.pi );
angle_degrees : constant float := 45.0;
angle_radians : constant float := float( numerics.pi ) / 4.0;
begin
put( "Sin " )
@( numerics.sin( angle_degrees, degrees_cycle ) )
@( numerics.sin( angle_radians, radians_cycle ) );
new_line;
 
put( "Cos " )
@( numerics.cos( angle_degrees, degrees_cycle ) )
@( numerics.cos( angle_radians, radians_cycle ) );
new_line;
 
put( "Tan " )
@( numerics.tan( angle_degrees, degrees_cycle ) )
@( numerics.tan( angle_radians, radians_cycle ) );
new_line;
 
put( "Cot " )
@( numerics.cot( angle_degrees, degrees_cycle ) )
@( numerics.cot( angle_radians, radians_cycle ) );
new_line;
 
put( "Arcsin" )
@( numerics.arcsin( numerics.sin( angle_degrees, degrees_cycle ), degrees_cycle ) )
@( numerics.arcsin( numerics.sin( angle_radians, radians_cycle ), radians_cycle ) );
new_line;
 
put( "Arccos" )
@( numerics.arccos( numerics.cos( angle_degrees, degrees_cycle ), degrees_cycle ) )
@( numerics.arccos( numerics.cos( angle_radians, radians_cycle ), radians_cycle ) );
new_line;
 
put( "Arctan" )
@( numerics.arctan( numerics.tan( angle_degrees, degrees_cycle ), 1, degrees_cycle ) )
@( numerics.arctan( numerics.tan( angle_radians, radians_cycle ), 1, radians_cycle ) );
new_line;
 
put( "Arccot" )
@( numerics.arccot( numerics.cot( angle_degrees, degrees_cycle ), 1, degrees_cycle ) )
@( numerics.arccot( numerics.cot( angle_radians, radians_cycle ), 1, radians_cycle ) );
new_line;
 
command_line.set_exit_status( 0 );
end trig;</syntaxhighlight>
{{out}}
<pre>
$ spar trig
Sin 7.07106781186547E-01 7.07106781186547E-01
Cos 7.07106781186547E-01 7.07106781186548E-01
Tan 1.00000000000000E+00 9.99999999999998E-01
Cot 1.00000000000000E+00 1.00000000000000E+00
Arcsin 4.50000000000000E+01 7.85398163397448E-01
Arccos 4.50000000000000E+01 7.85398163397448E-01
Arctan 45 7.85398163397448E-01
Arccot 45 7.85398163397449E-01</pre>
 
=={{header|SQL PL}}==
{{works with|Db2 LUW}}
With SQL only:
<syntaxhighlight lang="sql pl">
--Conversion
values degrees(3.1415926);
values radians(180);
-- This is equal to Pi.
 
--PI/4 45
values sin(radians(180)/4);
values sin(radians(45));
values cos(radians(180)/4);
values cos(radians(45));
values tan(radians(180)/4);
values tan(radians(45));
values cot(radians(180)/4);
values cot(radians(45));
values asin(sin(radians(180)/4));
values asin(sin(radians(45)));
values atan(tan(radians(180)/4));
values atan(tan(radians(45)));
 
--PI/3 60
values sin(radians(180)/3);
values sin(radians(60));
values cos(radians(180)/3);
values cos(radians(60));
values tan(radians(180)/3);
values tan(radians(60));
values cot(radians(180)/3);
values cot(radians(60));
values asin(sin(radians(180)/3));
values asin(sin(radians(60)));
values atan(tan(radians(180)/3));
values atan(tan(radians(60)));
</syntaxhighlight>
Output:
<pre>
db2 -tx
values degrees(3.1415926)
+1.79999996929531E+002
 
values radians(180)
+3.14159265358979E+000
 
values sin(radians(180)/4)
+7.07106781186547E-001
 
values sin(radians(45))
+7.07106781186547E-001
 
values cos(radians(180)/4)
+7.07106781186548E-001
 
values cos(radians(45))
+7.07106781186548E-001
 
values tan(radians(180)/4)
+1.00000000000000E+000
 
values tan(radians(45))
+1.00000000000000E+000
 
values cot(radians(180)/4)
+1.00000000000000E+000
 
values cot(radians(45))
+1.00000000000000E+000
 
values asin(sin(radians(180)/4))
+7.85398163397448E-001
 
values asin(sin(radians(45)))
+7.85398163397448E-001
 
values atan(tan(radians(180)/4))
+7.85398163397448E-001
 
values atan(tan(radians(45)))
+7.85398163397448E-001
 
values sin(radians(180)/3)
+8.66025403784439E-001
 
values sin(radians(60))
+8.66025403784439E-001
 
values cos(radians(180)/3)
+5.00000000000000E-001
 
values cos(radians(60))
+5.00000000000000E-001
 
values tan(radians(180)/3)
+1.73205080756888E+000
 
values tan(radians(60))
+1.73205080756888E+000
 
values cot(radians(180)/3)
+5.77350269189626E-001
 
values cot(radians(60))
+5.77350269189626E-001
 
values asin(sin(radians(180)/3))
+1.04719755119660E+000
 
values asin(sin(radians(60)))
+1.04719755119660E+000
 
values atan(tan(radians(180)/3))
+1.04719755119660E+000
 
values atan(tan(radians(60)))
+1.04719755119660E+000
</pre>
 
=={{header|Stata}}==
Stata computes only in radians, but the conversion is easy.
 
<syntaxhighlight lang="stata">scalar deg=_pi/180
 
display cos(30*deg)
display sin(30*deg)
display tan(30*deg)
 
display cos(_pi/6)
display sin(_pi/6)
display tan(_pi/6)
 
display acos(0.5)
display asin(0.5)
display atan(0.5)</syntaxhighlight>
 
=={{header|Tcl}}==
The built-in functions only take radian arguments.
<langsyntaxhighlight lang="tcl">package require Tcl 8.5
 
proc PI {} {expr {4*atan(1)}}
Line 3,542 ⟶ 5,478:
set arctan [atan [tan $radians]]; puts "$arctan [rad2deg $arctan]"
}
trig 60.0</langsyntaxhighlight>
<pre>0.8660254037844386
0.5000000000000001
Line 3,549 ⟶ 5,485:
1.0471975511965976 59.99999999999999
1.0471975511965976 59.99999999999999</pre>
 
=={{header|VBA}}==
<syntaxhighlight lang="vb">Public Sub trig()
Pi = WorksheetFunction.Pi()
Debug.Print Sin(Pi / 2)
Debug.Print Sin(90 * Pi / 180)
Debug.Print Cos(0)
Debug.Print Cos(0 * Pi / 180)
Debug.Print Tan(Pi / 4)
Debug.Print Tan(45 * Pi / 180)
Debug.Print WorksheetFunction.Asin(1) * 2
Debug.Print WorksheetFunction.Asin(1) * 180 / Pi
Debug.Print WorksheetFunction.Acos(0) * 2
Debug.Print WorksheetFunction.Acos(0) * 180 / Pi
Debug.Print Atn(1) * 4
Debug.Print Atn(1) * 180 / Pi
End Sub</syntaxhighlight>{{out}}
<pre> 1
1
1
1
1
1
3,14159265358979
90
3,14159265358979
90
3,14159265358979
45
</pre>
 
=={{header|Visual Basic .NET}}==
{{trans|C#}}
<syntaxhighlight lang="vbnet">Module Module1
 
Sub Main()
Console.WriteLine("=== radians ===")
Console.WriteLine(" sin (pi/3) = {0}", Math.Sin(Math.PI / 3))
Console.WriteLine(" cos (pi/3) = {0}", Math.Cos(Math.PI / 3))
Console.WriteLine(" tan (pi/3) = {0}", Math.Tan(Math.PI / 3))
Console.WriteLine("arcsin (1/2) = {0}", Math.Asin(0.5))
Console.WriteLine("arccos (1/2) = {0}", Math.Acos(0.5))
Console.WriteLine("arctan (1/2) = {0}", Math.Atan(0.5))
Console.WriteLine()
Console.WriteLine("=== degrees ===")
Console.WriteLine(" sin (60) = {0}", Math.Sin(60 * Math.PI / 180))
Console.WriteLine(" cos (60) = {0}", Math.Cos(60 * Math.PI / 180))
Console.WriteLine(" tan (60) = {0}", Math.Tan(60 * Math.PI / 180))
Console.WriteLine("arcsin (1/2) = {0}", Math.Asin(0.5) * 180 / Math.PI)
Console.WriteLine("arccos (1/2) = {0}", Math.Acos(0.5) * 180 / Math.PI)
Console.WriteLine("arctan (1/2) = {0}", Math.Atan(0.5) * 180 / Math.PI)
End Sub
 
End Module</syntaxhighlight>
{{out}}
<pre>=== radians ===
sin (pi/3) = 0.866025403784439
cos (pi/3) = 0.5
tan (pi/3) = 1.73205080756888
arcsin (1/2) = 0.523598775598299
arccos (1/2) = 1.0471975511966
arctan (1/2) = 0.463647609000806
 
=== degrees ===
sin (60) = 0.866025403784439
cos (60) = 0.5
tan (60) = 1.73205080756888
arcsin (1/2) = 30
arccos (1/2) = 60
arctan (1/2) = 26.565051177078</pre>
 
=={{header|Wren}}==
{{trans|Go}}
{{libheader|Wren-fmt}}
<syntaxhighlight lang="wren">import "./fmt" for Fmt
 
var d = 30
var r = d * Num.pi / 180
var s = 0.5
var c = 3.sqrt / 2
var t = 1 / 3.sqrt
 
Fmt.print("sin($9.6f deg) = $f", d, (d*Num.pi/180).sin)
Fmt.print("sin($9.6f rad) = $f", r, r.sin)
Fmt.print("cos($9.6f deg) = $f", d, (d*Num.pi/180).cos)
Fmt.print("cos($9.6f rad) = $f", r, r.cos)
Fmt.print("tan($9.6f deg) = $f", d, (d*Num.pi/180).tan)
Fmt.print("tan($9.6f rad) = $f", r, r.tan)
Fmt.print("asin($f) = $9.6f deg", s, s.asin*180/Num.pi)
Fmt.print("asin($f) = $9.6f rad", s, s.asin)
Fmt.print("acos($f) = $9.6f deg", c, c.acos*180/Num.pi)
Fmt.print("acos($f) = $9.6f rad", c, c.acos)
Fmt.print("atan($f) = $9.6f deg", t, t.atan*180/Num.pi)
Fmt.print("atan($f) = $9.6f rad", t, t.atan)</syntaxhighlight>
 
{{out}}
<pre>
sin(30.000000 deg) = 0.500000
sin( 0.523599 rad) = 0.500000
cos(30.000000 deg) = 0.866025
cos( 0.523599 rad) = 0.866025
tan(30.000000 deg) = 0.577350
tan( 0.523599 rad) = 0.577350
asin(0.500000) = 30.000000 deg
asin(0.500000) = 0.523599 rad
acos(0.866025) = 30.000000 deg
acos(0.866025) = 0.523599 rad
atan(0.577350) = 30.000000 deg
atan(0.577350) = 0.523599 rad
</pre>
 
=={{header|XPL0}}==
<langsyntaxhighlight XPL0lang="xpl0">include c:\cxpl\codes; \intrinsic 'code' declarations
def Pi = 3.14159265358979323846;
 
Line 3,577 ⟶ 5,623:
RlOut(0, ACos(B)); ChOut(0, 9\tab\); RlOut(0, Deg(ACos(B))); CrLf(0);
RlOut(0, ATan(C)); ChOut(0, 9\tab\); RlOut(0, Deg(ATan(C))); CrLf(0);
]</langsyntaxhighlight>
 
{{out}}
Output:
<pre>
0.50000 0.50000
Line 3,590 ⟶ 5,636:
 
=={{header|zkl}}==
<langsyntaxhighlight lang="zkl">
(30.0).toRad().sin() //-->0.5
(60.0).toRad().cos() //-->0.5
Line 3,601 ⟶ 5,647:
(1.0).atan() //-->0.785398
(1.0).atan().toDeg() //-->45
etc</langsyntaxhighlight>
 
=={{header|ZX Spectrum Basic}}==
The ZX Spectrum ROM only calculates sine and arctangent directly (via Chebyshev polynomials), and uses internal functions of these (and the square root) to generate the other functions. In particular, arcsin x is calculated as arctan ( x / ( sqrt ( 1 - x * x ) ) + 1 ) / 2, which is why some of these functions are legendarily slow.
<syntaxhighlight lang="zxbasic">10 DEF FN d(a)=a*PI/180:REM convert degrees to radians; all ZX Spectrum trig calculations are done in radians
20 DEF FN i(r)=180*r/PI:REM convert radians to degrees for inverse functions
30 LET d=45
40 LET r=PI/4
50 PRINT SIN r,SIN FN d(d)
60 PRINT COS r,COS FN d(d)
70 PRINT TAN r,TAN FN d(d)
80 PRINT
90 LET d=.5
110 PRINT ASN d,FN i(ASN d)
120 PRINT ACS d,FN i(ACS d)
130 PRINT ATN d,FN i(ATN d)</syntaxhighlight>
{{out}}
<pre>
0.70710678 0.70710678
0.70710678 0.70710678
1 1
 
0.52359878 30
1.0471976 60
0.46364761 26.565051
 
0 OK, 130:1
</pre>
 
{{omit from|Batch File|No access to advanced math.}}
{{omit from|M4}}
 
[[Category:MathematicsGeometry]]
2,063

edits