all tasks

This commit is contained in:
Ingy döt Net 2013-04-11 01:07:29 -07:00
parent b83f433714
commit 68f8f3e56b
14735 changed files with 178959 additions and 0 deletions

View file

@ -0,0 +1,2 @@
{{omit from|GAP}}
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]].

View file

@ -0,0 +1,2 @@
---
note: Arithmetic operations

View file

@ -0,0 +1,79 @@
(defun fac (n)
(if (zp n)
1
(* n (fac (1- n)))))
(defconst *pi-approx*
(/ 3141592653589793238462643383279
(expt 10 30)))
(include-book "arithmetic-3/floor-mod/floor-mod" :dir :system)
(defun dgt-to-str (d)
(case d
(1 "1") (2 "2") (3 "3") (4 "4") (5 "5")
(6 "6") (7 "7") (8 "8") (9 "9") (0 "0")))
(defmacro cat (&rest args)
`(concatenate 'string ,@args))
(defun num-to-str-r (n)
(if (zp n)
""
(cat (num-to-str-r (floor n 10))
(dgt-to-str (mod n 10)))))
(defun num-to-str (n)
(cond ((= n 0) "0")
((< n 0) (cat "-" (num-to-str-r (- n))))
(t (num-to-str-r n))))
(defun pad-with-zeros (places str lngth)
(declare (xargs :measure (nfix (- places lngth))))
(if (zp (- places lngth))
str
(pad-with-zeros places (cat "0" str) (1+ lngth))))
(defun as-decimal-str (r places)
(let ((before (floor r 1))
(after (floor (* (expt 10 places) (mod r 1)) 1)))
(cat (num-to-str before)
"."
(let ((afterstr (num-to-str after)))
(pad-with-zeros places afterstr
(length afterstr))))))
(defun taylor-sine (theta terms term)
(declare (xargs :measure (nfix (- terms term))))
(if (zp (- terms term))
0
(+ (/ (*(expt -1 term) (expt theta (1+ (* 2 term))))
(fac (1+ (* 2 term))))
(taylor-sine theta terms (1+ term)))))
(defun sine (theta)
(taylor-sine (mod theta (* 2 *pi-approx*))
20 0)) ; About 30 places of accuracy
(defun cosine (theta)
(sine (+ theta (/ *pi-approx* 2))))
(defun tangent (theta)
(/ (sine theta) (cosine theta)))
(defun rad->deg (rad)
(* 180 (/ rad *pi-approx*)))
(defun deg->rad (deg)
(* *pi-approx* (/ deg 180)))
(defun trig-demo ()
(progn$ (cw "sine of pi / 4 radians: ")
(cw (as-decimal-str (sine (/ *pi-approx* 4)) 20))
(cw "~%sine of 45 degrees: ")
(cw (as-decimal-str (sine (deg->rad 45)) 20))
(cw "~%cosine of pi / 4 radians: ")
(cw (as-decimal-str (cosine (/ *pi-approx* 4)) 20))
(cw "~%tangent of pi / 4 radians: ")
(cw (as-decimal-str (tangent (/ *pi-approx* 4)) 20))
(cw "~%")))

View file

@ -0,0 +1,22 @@
main:(
REAL pi = 4 * arc tan(1);
# Pi / 4 is 45 degrees. All answers should be the same. #
REAL radians = pi / 4;
REAL degrees = 45.0;
REAL temp;
# sine #
print((sin(radians), " ", sin(degrees * pi / 180), new line));
# cosine #
print((cos(radians), " ", cos(degrees * pi / 180), new line));
# tangent #
print((tan(radians), " ", tan(degrees * pi / 180), new line));
# arcsine #
temp := arc sin(sin(radians));
print((temp, " ", temp * 180 / pi, new line));
# arccosine #
temp := arc cos(cos(radians));
print((temp, " ", temp * 180 / pi, new line));
# arctangent #
temp := arc tan(tan(radians));
print((temp, " ", temp * 180 / pi, new line))
)

View file

@ -0,0 +1,40 @@
# tan(x) = tangent of x
function tan(x) {
return sin(x) / cos(x)
}
# asin(y) = arcsine of y, domain [-1, 1], range [-pi/2, pi/2]
function asin(y) {
return atan2(y, sqrt(1 - y * y))
}
# acos(x) = arccosine of x, domain [-1, 1], range [0, pi]
function acos(x) {
return atan2(sqrt(1 - x * x), x)
}
# atan(y) = arctangent of y, range (-pi/2, pi/2)
function atan(y) {
return atan2(y, 1)
}
BEGIN {
pi = atan2(0, -1)
degrees = pi / 180
print "Using radians:"
print " sin(-pi / 6) =", sin(-pi / 6)
print " cos(3 * pi / 4) =", cos(3 * pi / 4)
print " tan(pi / 3) =", tan(pi / 3)
print " asin(-1 / 2) =", asin(-1 / 2)
print " acos(-sqrt(2) / 2) =", acos(-sqrt(2) / 2)
print " atan(sqrt(3)) =", atan(sqrt(3))
print "Using degrees:"
print " sin(-30) =", sin(-30 * degrees)
print " cos(135) =", cos(135 * degrees)
print " tan(60) =", tan(60 * degrees)
print " asin(-1 / 2) =", asin(-1 / 2) / degrees
print " acos(-sqrt(2) / 2) =", acos(-sqrt(2) / 2) / degrees
print " atan(sqrt(3)) =", atan(sqrt(3)) / degrees
}

View file

@ -0,0 +1,16 @@
trace("Radians:");
trace("sin(Pi/4) = ", Math.sin(Math.PI/4));
trace("cos(Pi/4) = ", Math.cos(Math.PI/4));
trace("tan(Pi/4) = ", Math.tan(Math.PI/4));
trace("arcsin(0.5) = ", Math.asin(0.5));
trace("arccos(0.5) = ", Math.acos(0.5));
trace("arctan(0.5) = ", Math.atan(0.5));
trace("arctan2(-1,-2) = ", Math.atan2(-1,-2));
trace("\nDegrees")
trace("sin(45) = ", Math.sin(45 * Math.PI/180));
trace("cos(45) = ", Math.cos(45 * Math.PI/180));
trace("tan(45) = ", Math.tan(45 * Math.PI/180));
trace("arcsin(0.5) = ", Math.asin(0.5)*180/Math.PI);
trace("arccos(0.5) = ", Math.acos(0.5)*180/Math.PI);
trace("arctan(0.5) = ", Math.atan(0.5)*180/Math.PI);
trace("arctan2(-1,-2) = ", Math.atan2(-1,-2)*180/Math.PI);

View file

@ -0,0 +1,35 @@
with Ada.Numerics.Elementary_Functions;
use Ada.Numerics.Elementary_Functions;
with Ada.Float_Text_Io; use Ada.Float_Text_Io;
with Ada.Text_IO; use Ada.Text_IO;
procedure Trig is
Degrees_Cycle : constant Float := 360.0;
Radians_Cycle : constant Float := 2.0 * Ada.Numerics.Pi;
Angle_Degrees : constant Float := 45.0;
Angle_Radians : constant Float := Ada.Numerics.Pi / 4.0;
procedure Put (V1, V2 : Float) is
begin
Put (V1, Aft => 5, Exp => 0);
Put (" ");
Put (V2, Aft => 5, Exp => 0);
New_Line;
end Put;
begin
Put (Sin (Angle_Degrees, Degrees_Cycle),
Sin (Angle_Radians, Radians_Cycle));
Put (Cos (Angle_Degrees, Degrees_Cycle),
Cos (Angle_Radians, Radians_Cycle));
Put (Tan (Angle_Degrees, Degrees_Cycle),
Tan (Angle_Radians, Radians_Cycle));
Put (Cot (Angle_Degrees, Degrees_Cycle),
Cot (Angle_Radians, Radians_Cycle));
Put (ArcSin (Sin (Angle_Degrees, Degrees_Cycle), Degrees_Cycle),
ArcSin (Sin (Angle_Radians, Radians_Cycle), Radians_Cycle));
Put (Arccos (Cos (Angle_Degrees, Degrees_Cycle), Degrees_Cycle),
Arccos (Cos (Angle_Radians, Radians_Cycle), Radians_Cycle));
Put (Arctan (Y => Tan (Angle_Degrees, Degrees_Cycle)),
Arctan (Y => Tan (Angle_Radians, Radians_Cycle)));
Put (Arccot (X => Cot (Angle_Degrees, Degrees_Cycle)),
Arccot (X => Cot (Angle_Degrees, Degrees_Cycle)));
end Trig;

View file

@ -0,0 +1,28 @@
pi := 4 * atan(1)
radians := pi / 4
degrees := 45.0
result .= "`n" . sin(radians) . " " . sin(degrees * pi / 180)
result .= "`n" . cos(radians) . " " . cos(degrees * pi / 180)
result .= "`n" . tan(radians) . " " . tan(degrees * pi / 180)
temp := asin(sin(radians))
result .= "`n" . temp . " " . temp * 180 / pi
temp := acos(cos(radians))
result .= "`n" . temp . " " . temp * 180 / pi
temp := atan(tan(radians))
result .= "`n" . temp . " " . temp * 180 / pi
msgbox % result
/* output
---------------------------
trig.ahk
---------------------------
0.707107 0.707107
0.707107 0.707107
1.000000 1.000000
0.785398 45.000000
0.785398 45.000000
0.785398 45.000000
*/

View file

@ -0,0 +1,15 @@
pi = 3.141592653589793#
radians = pi / 4 'a.k.a. 45 degrees
degrees = 45 * pi / 180 'convert 45 degrees to radians once
PRINT SIN(radians) + " " + SIN(degrees) 'sine
PRINT COS(radians) + " " + COS(degrees) 'cosine
PRINT TAN(radians) + " " + TAN (degrees) 'tangent
'arcsin
thesin = SIN(radians)
arcsin = ATN(thesin / SQR(1 - thesin ^ 2))
PRINT arcsin + " " + arcsin * 180 / pi
'arccos
thecos = COS(radians)
arccos = 2 * ATN(SQR(1 - thecos ^ 2) / (1 + thecos))
PRINT arccos + " " + arccos * 180 / pi
PRINT ATN(TAN(radians)) + " " + ATN(TAN(radians)) * 180 / pi 'arctan

View file

@ -0,0 +1,14 @@
@% = &90F : REM set column width
angle_radians = PI/5
angle_degrees = 36
PRINT SIN(angle_radians), SIN(RAD(angle_degrees))
PRINT COS(angle_radians), COS(RAD(angle_degrees))
PRINT TAN(angle_radians), TAN(RAD(angle_degrees))
number = 0.6
PRINT ASN(number), DEG(ASN(number))
PRINT ACS(number), DEG(ACS(number))
PRINT ATN(number), DEG(ATN(number))

View file

@ -0,0 +1,31 @@
#include <iostream>
#include <cmath>
#ifdef M_PI // defined by all POSIX systems and some non-POSIX ones
double const pi = M_PI;
#else
double const pi = 4*std::atan(1);
#endif
double const degree = pi/180;
int main()
{
std::cout << "=== radians ===\n";
std::cout << "sin(pi/3) = " << std::sin(pi/3) << "\n";
std::cout << "cos(pi/3) = " << std::cos(pi/3) << "\n";
std::cout << "tan(pi/3) = " << std::tan(pi/3) << "\n";
std::cout << "arcsin(1/2) = " << std::asin(0.5) << "\n";
std::cout << "arccos(1/2) = " << std::acos(0.5) << "\n";
std::cout << "arctan(1/2) = " << std::atan(0.5) << "\n";
std::cout << "\n=== degrees ===\n";
std::cout << "sin(60°) = " << std::sin(60*degree) << "\n";
std::cout << "cos(60°) = " << std::cos(60*degree) << "\n";
std::cout << "tan(60°) = " << std::tan(60*degree) << "\n";
std::cout << "arcsin(1/2) = " << std::asin(0.5)/degree << "°\n";
std::cout << "arccos(1/2) = " << std::acos(0.5)/degree << "°\n";
std::cout << "arctan(1/2) = " << std::atan(0.5)/degree << "°\n";
return 0;
}

View file

@ -0,0 +1,27 @@
#include <math.h>
#include <stdio.h>
int main() {
double pi = 4 * atan(1);
/*Pi / 4 is 45 degrees. All answers should be the same.*/
double radians = pi / 4;
double degrees = 45.0;
double temp;
/*sine*/
printf("%f %f\n", sin(radians), sin(degrees * pi / 180));
/*cosine*/
printf("%f %f\n", cos(radians), cos(degrees * pi / 180));
/*tangent*/
printf("%f %f\n", tan(radians), tan(degrees * pi / 180));
/*arcsine*/
temp = asin(sin(radians));
printf("%f %f\n", temp, temp * 180 / pi);
/*arccosine*/
temp = acos(cos(radians));
printf("%f %f\n", temp, temp * 180 / pi);
/*arctangent*/
temp = atan(tan(radians));
printf("%f %f\n", temp, temp * 180 / pi);
return 0;
}

View file

@ -0,0 +1,16 @@
(ns user
(:require [clojure.contrib.generic.math-functions :as generic]))
;(def pi Math/PI)
(def pi (* 4 (atan 1)))
(def dtor (/ pi 180))
(def rtod (/ 180 pi))
(def radians (/ pi 4))
(def degrees 45)
(println (str (sin radians) " " (sin (* degrees dtor))))
(println (str (cos radians) " " (cos (* degrees dtor))))
(println (str (tan radians) " " (tan (* degrees dtor))))
(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)))

View file

@ -0,0 +1,16 @@
(defun deg->rad (x) (* x (/ pi 180)))
(defun rad->deg (x) (* x (/ 180 pi)))
(mapc (lambda (x) (format t "~s => ~s~%" x (eval x)))
'((sin (/ pi 4))
(sin (deg->rad 45))
(cos (/ pi 6))
(cos (deg->rad 30))
(tan (/ pi 3))
(tan (deg->rad 60))
(asin 1)
(rad->deg (asin 1))
(acos 1/2)
(rad->deg (acos 1/2))
(atan 15)
(rad->deg (atan 15))))

View file

@ -0,0 +1,21 @@
import std.stdio, std.math;
void main() {
enum real degrees = 45.0;
enum real t0 = degrees * PI / 180.0;
writeln("Reference: 0.7071067811865475244008");
writefln("Sine: %.20f %.20f", sin(PI_4), sin(t0));
writefln("Cosine: %.20f %.20f", cos(PI_4), cos(t0));
writefln("Tangent: %.20f %.20f", tan(PI_4), tan(t0));
writeln();
writeln("Reference: 0.7853981633974483096156");
immutable real t1 = asin(sin(PI_4));
writefln("Arcsine: %.20f %.20f", t1, t1 * 180.0 / PI);
immutable real t2 = acos(cos(PI_4));
writefln("Arccosine: %.20f %.20f", t2, t2 * 180.0 / PI);
immutable real t3 = atan(tan(PI_4));
writefln("Arctangent: %.20f %.20f", t3, t3 * 180.0 / PI);
}

View file

@ -0,0 +1,16 @@
def pi := (-1.0).acos()
def radians := pi / 4.0
def degrees := 45.0
def d2r := (pi/180).multiply
def r2d := (180/pi).multiply
println(`$\
${radians.sin()} ${d2r(degrees).sin()}
${radians.cos()} ${d2r(degrees).cos()}
${radians.tan()} ${d2r(degrees).tan()}
${def asin := radians.sin().asin()} ${r2d(asin)}
${def acos := radians.cos().acos()} ${r2d(acos)}
${def atan := radians.tan().atan()} ${r2d(atan)}
`)

View file

@ -0,0 +1,4 @@
Deg=45.
Rad=math:pi()/4.
math:sin(Deg * math:pi() / 180)==math:sin(Rad).

View file

@ -0,0 +1 @@
math:cos(Deg * math:pi() / 180)==math:cos(Rad).

View file

@ -0,0 +1 @@
math:tan(Deg * math:pi() / 180)==math:tan(Rad).

View file

@ -0,0 +1,2 @@
Temp = math:acos(math:cos(Rad)).
Temp * 180 / math:pi()==Deg.

View file

@ -0,0 +1,2 @@
Temp = math:atan(math:tan(Rad)).
Temp * 180 / math:pi()==Deg.

View file

@ -0,0 +1,20 @@
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)
}
}

View file

@ -0,0 +1,8 @@
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] )

View file

@ -0,0 +1,18 @@
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

View file

@ -0,0 +1,4 @@
ATAN2(y,x) ! Arctangent(y/x), ''-pi < result <= +pi''
SINH(x) ! Hyperbolic sine
COSH(x) ! Hyperbolic cosine
TANH(x) ! Hyperbolic tangent

View file

@ -0,0 +1,28 @@
package main
import (
"fmt"
"math"
)
const d = 30.
const r = d * math.Pi / 180
var s = .5
var c = math.Sqrt(3) / 2
var t = 1 / math.Sqrt(3)
func main() {
fmt.Printf("sin(%9.6f deg) = %f\n", d, math.Sin(d*math.Pi/180))
fmt.Printf("sin(%9.6f rad) = %f\n", r, math.Sin(r))
fmt.Printf("cos(%9.6f deg) = %f\n", d, math.Cos(d*math.Pi/180))
fmt.Printf("cos(%9.6f rad) = %f\n", r, math.Cos(r))
fmt.Printf("tan(%9.6f deg) = %f\n", d, math.Tan(d*math.Pi/180))
fmt.Printf("tan(%9.6f rad) = %f\n", r, math.Tan(r))
fmt.Printf("asin(%f) = %9.6f deg\n", s, math.Asin(s)*180/math.Pi)
fmt.Printf("asin(%f) = %9.6f rad\n", s, math.Asin(s))
fmt.Printf("acos(%f) = %9.6f deg\n", c, math.Acos(c)*180/math.Pi)
fmt.Printf("acos(%f) = %9.6f rad\n", c, math.Acos(c))
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))
}

View file

@ -0,0 +1,12 @@
def radians = Math.PI/4
def degrees = 45
def d2r = { it*Math.PI/180 }
def r2d = { it*180/Math.PI }
println "sin(\u03C0/4) = ${Math.sin(radians)} == sin(45\u00B0) = ${Math.sin(d2r(degrees))}"
println "cos(\u03C0/4) = ${Math.cos(radians)} == cos(45\u00B0) = ${Math.cos(d2r(degrees))}"
println "tan(\u03C0/4) = ${Math.tan(radians)} == tan(45\u00B0) = ${Math.tan(d2r(degrees))}"
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"

View file

@ -0,0 +1,10 @@
fromDegrees deg = deg * pi / 180
toDegrees rad = rad * 180 / pi
example = [
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)]

View file

@ -0,0 +1,12 @@
pi = 4.0 * ATAN(1.0)
dtor = pi / 180.0
rtod = 180.0 / pi
radians = pi / 4.0
degrees = 45.0
WRITE(ClipBoard) SIN(radians), SIN(degrees*dtor)
WRITE(ClipBoard) COS(radians), COS(degrees*dtor)
WRITE(ClipBoard) TAN(radians), TAN(degrees*dtor)
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

View file

@ -0,0 +1,6 @@
0.7071067812 0.7071067812
0.7071067812 0.7071067812
1 1
0.7853981634 45
0.7853981634 45
0.7853981634 45

View file

@ -0,0 +1,2 @@
deg = 35 ; arbitrary number of degrees
rad = !dtor*deg ; system variables !dtor and !radeg convert between rad and deg

View file

@ -0,0 +1,9 @@
; the trig functions receive and emit radians:
print, rad, sin(rad), asin(sin(rad))
print, cos(rad), acos(cos(rad))
print, tan(rad), atan(tan(rad)) ; etc
; prints the following:
; 0.610865 0.573576 0.610865
; 0.819152 0.610865
; 0.700208 0.610865

View file

@ -0,0 +1,5 @@
; the hyperbolic versions exist and behave as expected:
print, sinh(rad) ; etc
; outputs
; 0.649572

View file

@ -0,0 +1,8 @@
;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)
;outputs:
; 1.0000000 0.86602540
; 0.70710678 0.58778525
; 0.50000000 0.43388374

View file

@ -0,0 +1,6 @@
; the trig functions behave as expected for complex arguments:
x = complex(1,2)
print,sin(x)
; outputs
; ( 3.16578, 1.95960)

View file

@ -0,0 +1,8 @@
invocable all
procedure main()
d := 30 # degrees
r := dtor(d) # convert to radians
every write(f := !["sin","cos","tan"],"(",r,")=",y := f(r)," ",fi := "a" || f,"(",y,")=",x := fi(y)," rad = ",rtod(x)," deg")
end

View file

@ -0,0 +1 @@
>,:(1&o. ; 2&o. ; 3&o.) (4%~o. 1), 180%~o. 45

View file

@ -0,0 +1 @@
>,:([ , 180p_1&*)&.> (_1&o. ; _2&o. ; _3&o.) 0.5

View file

@ -0,0 +1,22 @@
public class Trig {
public static void main(String[] args) {
//Pi / 4 is 45 degrees. All answers should be the same.
double radians = Math.PI / 4;
double degrees = 45.0;
//sine
System.out.println(Math.sin(radians) + " " + Math.sin(Math.toRadians(degrees)));
//cosine
System.out.println(Math.cos(radians) + " " + Math.cos(Math.toRadians(degrees)));
//tangent
System.out.println(Math.tan(radians) + " " + Math.tan(Math.toRadians(degrees)));
//arcsine
double arcsin = Math.asin(Math.sin(radians));
System.out.println(arcsin + " " + Math.toDegrees(arcsin));
//arccosine
double arccos = Math.acos(Math.cos(radians));
System.out.println(arccos + " " + Math.toDegrees(arccos));
//arctangent
double arctan = Math.atan(Math.tan(radians));
System.out.println(arctan + " " + Math.toDegrees(arctan));
}
}

View file

@ -0,0 +1,22 @@
var
radians = Math.PI / 4, // Pi / 4 is 45 degrees. All answers should be the same.
degrees = 45.0,
sine = Math.sin(radians),
cosine = Math.cos(radians),
tangent = Math.tan(radians),
arcsin = Math.asin(sine),
arccos = Math.acos(cosine),
arctan = Math.atan(tangent);
// sine
window.alert(sine + " " + Math.sin(degrees * Math.PI / 180));
// cosine
window.alert(cosine + " " + Math.cos(degrees * Math.PI / 180));
// tangent
window.alert(tangent + " " + Math.tan(degrees * Math.PI / 180));
// arcsine
window.alert(arcsin + " " + (arcsin * 180 / Math.PI));
// arccosine
window.alert(arccos + " " + (arccos * 180 / Math.PI));
// arctangent
window.alert(arctan + " " + (arctan * 180 / Math.PI));

View file

@ -0,0 +1,14 @@
pi = ACS(-1)
radians = pi / 4.0
rtod = 180 / pi
degrees = radians * rtod
dtor = pi / 180
'LB works in radians, so degrees require conversion
print "Sin: ";SIN(radians);" "; SIN(degrees*dtor)
print "Cos: ";COS(radians);" "; COS(degrees*dtor)
print "Tan: ";TAN(radians);" ";TAN(degrees*dtor)
print "- Inverse functions:"
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"

View file

@ -0,0 +1,7 @@
print sin 45
print cos 45
print arctan 1
make "pi (radarctan 0 1) * 2 ; based on quadrant if uses two parameters
print radsin :pi / 4
print radcos :pi / 4
print 4 * radarctan 1

View file

@ -0,0 +1,6 @@
print sin 45
print cos 45
print arctan 1
print radsin pi / 4
print radcos pi / 4
print 4 * radarctan 1

View file

@ -0,0 +1 @@
print(math.cos(1), math.sin(1), math.tan(1), math.atan(1), math.atan2(3, 4))

View file

@ -0,0 +1,13 @@
function trigExample(angleDegrees)
angleRadians = angleDegrees * (pi/180);
disp(sprintf('sin(%f)= %f\nasin(%f)= %f',[angleRadians sin(angleRadians) sin(angleRadians) asin(sin(angleRadians))]));
disp(sprintf('sind(%f)= %f\narcsind(%f)= %f',[angleDegrees sind(angleDegrees) sind(angleDegrees) asind(sind(angleDegrees))]));
disp('-----------------------');
disp(sprintf('cos(%f)= %f\nacos(%f)= %f',[angleRadians cos(angleRadians) cos(angleRadians) acos(cos(angleRadians))]));
disp(sprintf('cosd(%f)= %f\narccosd(%f)= %f',[angleDegrees cosd(angleDegrees) cosd(angleDegrees) acosd(cosd(angleDegrees))]));
disp('-----------------------');
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

View file

@ -0,0 +1,15 @@
>> trigExample(78)
sin(1.361357)= 0.978148
asin(0.978148)= 1.361357
sind(78.000000)= 0.978148
arcsind(0.978148)= 78.000000
-----------------------
cos(1.361357)= 0.207912
acos(0.207912)= 1.361357
cosd(78.000000)= 0.207912
arccosd(0.207912)= 78.000000
-----------------------
tan(1.361357)= 4.704630
atan(4.704630)= 1.361357
tand(78.000000)= 4.704630
arctand(4.704630)= 78.000000

View file

@ -0,0 +1,21 @@
local radians = pi / 4
local degrees = 45.0
--sine
print (sin (radToDeg radians))
print (sin degrees)
--cosine
print (cos (radToDeg radians))
print (cos degrees)
--tangent
print (tan (radToDeg radians))
print (tan degrees)
--arcsine
print (asin (sin (radToDeg radians)))
print (asin (sin degrees))
--arccosine
print (acos (cos (radToDeg radians)))
print (acos (cos degrees))
--arctangent
print (atan (tan (radToDeg radians)))
print (atan (tan degrees))

View file

@ -0,0 +1,9 @@
Sin[1]
Cos[1]
Tan[1]
ArcSin[1]
ArcCos[1]
ArcTan[1]
Sin[90 Degree]
Cos[90 Degree]
Tan[90 Degree]

View file

@ -0,0 +1,10 @@
a: %pi / 3;
[sin(a), cos(a), tan(a), sec(a), csc(a), cot(a)];
b: 1 / 2;
[asin(b), acos(b), atan(b), asec(1 / b), acsc(1 / b), acot(b)];
/* Hyperbolic functions are also available */
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;

View file

@ -0,0 +1,46 @@
Pi := 3.14159;
vardef torad expr x = Pi*x/180 enddef; % conversions
vardef todeg expr x = 180x/Pi enddef;
vardef sin expr x = sind(todeg(x)) enddef; % radians version of sind
vardef cos expr x = cosd(todeg(x)) enddef; % and cosd
vardef sign expr x = if x>=0: 1 else: -1 fi enddef; % commodity
vardef tand expr x = % tan with arg in degree
if cosd(x) = 0:
infinity * sign(sind(x))
else: sind(x)/cosd(x) fi enddef;
vardef tan expr x = tand(todeg(x)) enddef; % arg in rad
% INVERSE
% the arc having x as tanget is that between x-axis and a line
% from the center to the point (1, x); MF angle says this
vardef atand expr x = angle(1,x) enddef;
vardef atan expr x = torad(atand(x)) enddef; % rad version
% known formula to express asin and acos in function of
% atan; a+-+b stays for sqrt(a^2 - b^2) (defined in plain MF)
vardef asin expr x = 2atan(x/(1+(1+-+x))) enddef;
vardef acos expr x = 2atan((1+-+x)/(1+x)) enddef;
vardef asind expr x = todeg(asin(x)) enddef; % degree versions
vardef acosd expr x = todeg(acos(x)) enddef;
% commodity
def outcompare(expr a, b) = message decimal a & " = " & decimal b enddef;
% output tests
outcompare(torad(60), Pi/3);
outcompare(todeg(Pi/6), 30);
outcompare(Pi/3, asin(sind(60)));
outcompare(30, acosd(cos(Pi/6)));
outcompare(45, atand(tand(45)));
outcompare(Pi/4, atan(tand(45)));
outcompare(sin(Pi/3), sind(60));
outcompare(cos(Pi/4), cosd(45));
outcompare(tan(Pi/3), tand(60));
end

View file

@ -0,0 +1,35 @@
/* NetRexx */
options replace format comments java crossref symbols nobinary utf8
numeric digits 30
parse 'Radians Degrees angle' RADIANS DEGREES ANGLE .;
parse 'sine cosine tangent arcsine arccosine arctangent' SINE COSINE TANGENT ARCSINE ARCCOSINE ARCTANGENT .
trigVals = ''
trigVals[RADIANS, ANGLE ] = (Rexx Math.PI) / 4 -- Pi/4 == 45 degrees
trigVals[DEGREES, ANGLE ] = 45.0
trigVals[RADIANS, SINE ] = (Rexx Math.sin(trigVals[RADIANS, ANGLE]))
trigVals[DEGREES, SINE ] = (Rexx Math.sin(Math.toRadians(trigVals[DEGREES, ANGLE])))
trigVals[RADIANS, COSINE ] = (Rexx Math.cos(trigVals[RADIANS, ANGLE]))
trigVals[DEGREES, COSINE ] = (Rexx Math.cos(Math.toRadians(trigVals[DEGREES, ANGLE])))
trigVals[RADIANS, TANGENT ] = (Rexx Math.tan(trigVals[RADIANS, ANGLE]))
trigVals[DEGREES, TANGENT ] = (Rexx Math.tan(Math.toRadians(trigVals[DEGREES, ANGLE])))
trigVals[RADIANS, ARCSINE ] = (Rexx Math.asin(trigVals[RADIANS, SINE]))
trigVals[DEGREES, ARCSINE ] = (Rexx Math.toDegrees(Math.acos(trigVals[DEGREES, SINE])))
trigVals[RADIANS, ARCCOSINE ] = (Rexx Math.acos(trigVals[RADIANS, COSINE]))
trigVals[DEGREES, ARCCOSINE ] = (Rexx Math.toDegrees(Math.acos(trigVals[DEGREES, COSINE])))
trigVals[RADIANS, ARCTANGENT] = (Rexx Math.atan(trigVals[RADIANS, TANGENT]))
trigVals[DEGREES, ARCTANGENT] = (Rexx Math.toDegrees(Math.atan(trigVals[DEGREES, TANGENT])))
say ' '.right(12)'|' RADIANS.right(17) '|' DEGREES.right(17) '|'
say ANGLE.right(12)'|' trigVals[RADIANS, ANGLE ].format(4, 12) '|' trigVals[DEGREES, ANGLE ].format(4, 12) '|'
say SINE.right(12)'|' trigVals[RADIANS, SINE ].format(4, 12) '|' trigVals[DEGREES, SINE ].format(4, 12) '|'
say COSINE.right(12)'|' trigVals[RADIANS, COSINE ].format(4, 12) '|' trigVals[DEGREES, COSINE ].format(4, 12) '|'
say TANGENT.right(12)'|' trigVals[RADIANS, TANGENT ].format(4, 12) '|' trigVals[DEGREES, TANGENT ].format(4, 12) '|'
say ARCSINE.right(12)'|' trigVals[RADIANS, ARCSINE ].format(4, 12) '|' trigVals[DEGREES, ARCSINE ].format(4, 12) '|'
say ARCCOSINE.right(12)'|' trigVals[RADIANS, ARCCOSINE ].format(4, 12) '|' trigVals[DEGREES, ARCCOSINE ].format(4, 12) '|'
say ARCTANGENT.right(12)'|' trigVals[RADIANS, ARCTANGENT].format(4, 12) '|' trigVals[DEGREES, ARCTANGENT].format(4, 12) '|'
say
return

View file

@ -0,0 +1,14 @@
let pi = 4. *. atan 1.
let radians = pi /. 4.
let degrees = 45.;;
Printf.printf "%f %f\n" (sin radians) (sin (degrees *. pi /. 180.));;
Printf.printf "%f %f\n" (cos radians) (cos (degrees *. pi /. 180.));;
Printf.printf "%f %f\n" (tan radians) (tan (degrees *. pi /. 180.));;
let arcsin = asin (sin radians);;
Printf.printf "%f %f\n" arcsin (arcsin *. 180. /. pi);;
let arccos = acos (cos radians);;
Printf.printf "%f %f\n" arccos (arccos *. 180. /. pi);;
let arctan = atan (tan radians);;
Printf.printf "%f %f\n" arctan (arctan *. 180. /. pi);;

View file

@ -0,0 +1,21 @@
function d = degree(rad)
d = 180*rad/pi;
endfunction
r = pi/3;
rd = degree(r);
funcs = { "sin", "cos", "tan", "sec", "cot", "csc" };
ifuncs = { "asin", "acos", "atan", "asec", "acot", "acsc" };
for i = 1 : numel(funcs)
v = arrayfun(funcs{i}, r);
vd = arrayfun(strcat(funcs{i}, "d"), rd);
iv = arrayfun(ifuncs{i}, v);
ivd = arrayfun(strcat(ifuncs{i}, "d"), vd);
printf("%s(%f) = %s(%f) = %f (%f)\n",
funcs{i}, r, strcat(funcs{i}, "d"), rd, v, vd);
printf("%s(%f) = %f\n%s(%f) = %f\n",
ifuncs{i}, v, iv,
strcat(ifuncs{i}, "d"), vd, ivd);
endfor

View file

@ -0,0 +1,21 @@
declare
PI = 3.14159265
fun {FromDegrees Deg}
Deg * PI / 180.
end
fun {ToDegrees Rad}
Rad * 180. / PI
end
Radians = PI / 4.
Degrees = 45.
in
for F in [Sin Cos Tan] do
{System.showInfo {F Radians}#" "#{F {FromDegrees Degrees}}}
end
for I#F in [Asin#Sin Acos#Cos Atan#Tan] do
{System.showInfo {I {F Radians}}#" "#{ToDegrees {I {F Radians}}}}
end

View file

@ -0,0 +1,6 @@
cos(Pi/2)
sin(Pi/2)
tan(Pi/2)
acos(1)
asin(1)
atan(1)

View file

@ -0,0 +1,8 @@
$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;

View file

@ -0,0 +1,18 @@
declare (x, xd, y, v) float;
x = 0.5; xd = 45;
/* angle in radians: */
v = sin(x); y = asin(v); put skip list (y);
v = cos(x); y = acos(v); put skip list (y);
v = tan(x); y = atan(v); put skip list (y);
/* angle in degrees: */
v = sind(xd); put skip list (v);
v = cosd(xd); put skip list (v);
v = tand(xd); y = atand(v); put skip list (y);
/* hyperbolic functions: */
v = sinh(x); put skip list (v);
v = cosh(x); put skip list (v);
v = tanh(x); y = atanh(v); put skip list (y);

View file

@ -0,0 +1,12 @@
DECLARE
pi NUMBER := 4 * atan(1);
radians NUMBER := pi / 4;
degrees NUMBER := 45.0;
BEGIN
DBMS_OUTPUT.put_line(SIN(radians) || ' ' || SIN(degrees * pi/180) );
DBMS_OUTPUT.put_line(COS(radians) || ' ' || COS(degrees * pi/180) );
DBMS_OUTPUT.put_line(TAN(radians) || ' ' || TAN(degrees * pi/180) );
DBMS_OUTPUT.put_line(ASIN(SIN(radians)) || ' ' || ASIN(SIN(degrees * pi/180)) * 180/pi);
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;

View file

@ -0,0 +1,4 @@
ATAN2(n1,n2) --Arctangent(y/x), -pi < result <= +pi
SINH(n) --Hyperbolic sine
COSH(n) --Hyperbolic cosine
TANH(n) --Hyperbolic tangent

View file

@ -0,0 +1,21 @@
Program TrigonometricFuntions(output);
uses
math;
var
radians, degree: double;
begin
radians := pi / 4.0;
degree := 45;
// Pascal works in radians. Necessary degree-radian conversions are shown.
writeln (sin(radians),' ', sin(degree/180*pi));
writeln (cos(radians),' ', cos(degree/180*pi));
writeln (tan(radians),' ', tan(degree/180*pi));
writeln ();
writeln (arcsin(sin(radians)),' Rad., or ', arcsin(sin(degree/180*pi))/pi*180,' Deg.');
writeln (arccos(cos(radians)),' Rad., or ', arccos(cos(degree/180*pi))/pi*180,' Deg.');
writeln (arctan(tan(radians)),' Rad., or ', arctan(tan(degree/180*pi))/pi*180,' Deg.');
// ( radians ) / pi * 180 = deg.
end.

View file

@ -0,0 +1,7 @@
say sin(pi/3), ' ', sin 60, 'd'; # 'g' (gradians) and 1 (circles)
say cos(pi/4), ' ', cos 45, 'd'; # are also recognized.
say tan(pi/6), ' ', tan 30, 'd';
say asin(sqrt(3)/2), ' ', asin sqrt(3)/2, 'd';
say acos(1/sqrt 2), ' ', acos 1/sqrt(2), 'd';
say atan(1/sqrt 3), ' ', atan 1/sqrt(3), 'd';

View file

@ -0,0 +1,17 @@
use Math::Trig;
my $angle_degrees = 45;
my $angle_radians = pi / 4;
print sin($angle_radians), ' ', sin(deg2rad($angle_degrees)), "\n";
print cos($angle_radians), ' ', cos(deg2rad($angle_degrees)), "\n";
print tan($angle_radians), ' ', tan(deg2rad($angle_degrees)), "\n";
print cot($angle_radians), ' ', cot(deg2rad($angle_degrees)), "\n";
my $asin = asin(sin($angle_radians));
print $asin, ' ', rad2deg($asin), "\n";
my $acos = acos(cos($angle_radians));
print $acos, ' ', rad2deg($acos), "\n";
my $atan = atan(tan($angle_radians));
print $atan, ' ', rad2deg($atan), "\n";
my $acot = acot(cot($angle_radians));
print $acot, ' ', rad2deg($acot), "\n";

View file

@ -0,0 +1,20 @@
(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) )

View file

@ -0,0 +1,15 @@
sin(30) =>
cos(45) =>
tan(45) =>
arcsin(0.7) =>
arccos(0.7) =>
arctan(0.7) =>
;;; switch to radians
true -> popradians;
sin(pi*30/180) =>
cos(pi*45/180) =>
tan(pi*45/180) =>
arcsin(0.7) =>
arccos(0.7) =>
arctan(0.7) =>

View file

@ -0,0 +1,11 @@
90 sin =
60 cos =
%tan of 45 degrees
45 sin 45 cos div =
%inverse tan ( arc tan of sqrt 3)
3 sqrt 1 atan =

View file

@ -0,0 +1,12 @@
$rad = [Math]::PI / 4
$deg = 45
'{0,10} {1,10}' -f 'Radians','Degrees'
'{0,10:N6} {1,10:N6}' -f [Math]::Sin($rad), [Math]::Sin($deg * [Math]::PI / 180)
'{0,10:N6} {1,10:N6}' -f [Math]::Cos($rad), [Math]::Cos($deg * [Math]::PI / 180)
'{0,10:N6} {1,10:N6}' -f [Math]::Tan($rad), [Math]::Tan($deg * [Math]::PI / 180)
$temp = [Math]::Asin([Math]::Sin($rad))
'{0,10:N6} {1,10:N6}' -f $temp, ($temp * 180 / [Math]::PI)
$temp = [Math]::Acos([Math]::Cos($rad))
'{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)

View file

@ -0,0 +1,24 @@
OpenConsole()
Macro DegToRad(deg)
deg*#PI/180
EndMacro
Macro RadToDeg(rad)
rad*180/#PI
EndMacro
degree = 45
radians.f = #PI/4
PrintN(StrF(Sin(DegToRad(degree)))+" "+StrF(Sin(radians)))
PrintN(StrF(Cos(DegToRad(degree)))+" "+StrF(Cos(radians)))
PrintN(StrF(Tan(DegToRad(degree)))+" "+StrF(Tan(radians)))
arcsin.f = ASin(Sin(radians))
PrintN(StrF(arcsin)+" "+Str(RadToDeg(arcsin)))
arccos.f = ACos(Cos(radians))
PrintN(StrF(arccos)+" "+Str(RadToDeg(arccos)))
arctan.f = ATan(Tan(radians))
PrintN(StrF(arctan)+" "+Str(RadToDeg(arctan)))
Input()

View file

@ -0,0 +1,20 @@
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
>>> rad, deg = pi/4, 45.0
>>> print("Sine:", sin(rad), sin(radians(deg)))
Sine: 0.7071067811865475 0.7071067811865475
>>> print("Cosine:", cos(rad), cos(radians(deg)))
Cosine: 0.7071067811865476 0.7071067811865476
>>> print("Tangent:", tan(rad), tan(radians(deg)))
Tangent: 0.9999999999999999 0.9999999999999999
>>> arcsine = asin(sin(rad))
>>> print("Arcsine:", arcsine, degrees(arcsine))
Arcsine: 0.7853981633974482 44.99999999999999
>>> arccosine = acos(cos(rad))
>>> print("Arccosine:", arccosine, degrees(arccosine))
Arccosine: 0.7853981633974483 45.0
>>> arctangent = atan(tan(rad))
>>> print("Arctangent:", arctangent, degrees(arctangent))
Arctangent: 0.7853981633974483 45.0
>>>

View file

@ -0,0 +1,23 @@
deg <- function(radians) 180*radians/pi
rad <- function(degrees) degrees*pi/180
sind <- function(ang) sin(rad(ang))
cosd <- function(ang) cos(rad(ang))
tand <- function(ang) tan(rad(ang))
asind <- function(v) deg(asin(v))
acosd <- function(v) deg(acos(v))
atand <- function(v) deg(atan(v))
r <- pi/3
rd <- deg(r)
print( c( sin(r), sind(rd)) )
print( c( cos(r), cosd(rd)) )
print( c( tan(r), tand(rd)) )
S <- sin(pi/4)
C <- cos(pi/3)
T <- tan(pi/4)
print( c( asin(S), asind(S) ) )
print( c( acos(C), acosd(C) ) )
print( c( atan(T), atand(T) ) )

View file

@ -0,0 +1,29 @@
REBOL [
Title: "Trigonometric Functions"
Author: oofoe
Date: 2009-12-07
URL: http://rosettacode.org/wiki/Trigonometric_Functions
]
radians: pi / 4 degrees: 45.0
; Unlike most languages, REBOL's trig functions work in degrees unless
; you specify differently.
print [sine/radians radians sine degrees]
print [cosine/radians radians cosine degrees]
print [tangent/radians radians tangent degrees]
d2r: func [
"Convert degrees to radians."
d [number!] "Degrees"
][d * pi / 180]
arcsin: arcsine sine degrees
print [d2r arcsin arcsin]
arccos: arccosine cosine degrees
print [d2r arccos arccos]
arctan: arctangent tangent degrees
print [d2r arctan arctan]

View file

@ -0,0 +1,9 @@
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 bif.
The technique used (below) is to set the numeric digits ten higher
than the desired digits, as specified by the SHOWDIGS variable.

View file

@ -0,0 +1,109 @@
/*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
do j=-180 to +180 by 15 /*let's just do a half-Monty. */
stuff = right(j,4) 'degrees, rads='show( d2r(j)),
' sin='show(sinD(j)),
' cos='show(cosD(J))
/*don't let TAN go postal.*/
if abs(j)\==90 then stuff=stuff ' tan='show(tanD(j))
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.*/
/*──────────────────────────────────subroutines─────────────────────────*/
Asin: procedure; arg x; if x<-1 | x>1 then call AsinErr; s=x*x
if abs(x)>=.7 then return sign(x)*Acos(sqrt(1-s)); z=x; o=x; p=z
do j=2 by 2; o=o*s*(j-1)/j; z=z+o/(j+1); if z=p then leave; p=z; end
return z
Atan: procedure; arg x; if abs(x)=1 then return pi()/4*sign(x)
return Asin(x/sqrt(1+x**2))
cos: procedure; arg x; x=r2r(x); a=abs(x); numeric fuzz min(9,digits()-9)
if a=pi() then return -1; if a=pi()/2 | a=2*pi() then return 0
if a=pi()/3 then return .5; if a=2*pi()/3 then return -.5
return .sinCos(1,1,-1)
sin: procedure; arg x; x=r2r(x); numeric fuzz min(5,digits()-3)
if abs(x)=pi() then return 0; return .sinCos(x,x,1)
.sinCos: parse arg z 1 p,_,i; x=x*x
do k=2 by 2; _=-_*x/(k*(k+i));z=z+_;if z=p then leave;p=z;end; return z
sqrt: procedure; parse arg x; if x=0 then return 0; d=digits();numeric digits 11
g=.sqrtGuess(); do j=0 while p>9; m.j=p; p=p%2+1; end
do k=j+5 to 0 by -1; if m.k>11 then numeric digits m.k; g=.5*(g+x/g); end
numeric digits d; return g/1
.sqrtGuess: if x<0 then call sqrtErr; numeric form; m.=11; p=d+d%4+2
parse value format(x,2,1,,0) 'E0' with g 'E' _ .; return g*.5'E'_%2
e: return,
2.7182818284590452353602874713526624977572470936999595749669676277240766303535
/*Note: the "real: E subroutine returns E's accuracy that */
/*matches the current NUMERIC DIGITS, up to 1 million digits.*/
/*If more than 1 million digits are required, be patient. */
exp: procedure; 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=z*e()**ix; return z
pi: return, /*a bit of overkill, but hey !! */
3.1415926535897932384626433832795028841971693993751058209749445923078164062862
/*Note: the real 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. */
Acos: procedure; 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(arg(1)))
tan: procedure; 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(arg(1)*pi()/180) /*convert degrees ──► radians. */
r2d: return d2d((arg(1)*180/pi())) /*convert radians ──► degrees. */
r2r: return arg(1)//(2*pi()) /*normalize radians►1 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...)
*/

View file

@ -0,0 +1,33 @@
$APPTYPE CONSOLE
$TYPECHECK ON
SUB pause(prompt$)
PRINT prompt$
DO
SLEEP .1
LOOP UNTIL LEN(INKEY$) > 0
END SUB
'MAIN
DEFDBL pi , radians , degrees , deg2rad
pi = 4 * ATAN(1)
deg2rad = pi / 180
radians = pi / 4
degrees = 45 * deg2rad
PRINT format$("%.6n" , SIN(radians)) + " " + format$("%.6n" , SIN(degrees))
PRINT format$("%.6n" , COS(radians)) + " " + format$("%.6n" , COS(degrees))
PRINT format$("%.6n" , TAN(radians)) + " " + format$("%.6n" , TAN(degrees))
DEFDBL temp = SIN(radians)
PRINT format$("%.6n" , ASIN(temp)) + " " + format$("%.6n" , ASIN(temp) / deg2rad)
temp = COS(radians)
PRINT format$("%.6n" , ACOS(temp)) + " " + format$("%.6n" , ACOS(temp) / deg2rad)
temp = TAN(radians)
PRINT format$("%.6n" , ATAN(temp)) + " " + format$("%.6n" , ATAN(temp) / deg2rad)
pause("Press any key to continue.")
END 'MAIN

View file

@ -0,0 +1,26 @@
radians = Math::PI / 4
degrees = 45.0
def deg2rad(d)
d * Math::PI / 180
end
def rad2deg(r)
r * 180 / Math::PI
end
#sine
puts "#{Math.sin(radians)} #{Math.sin(deg2rad(degrees))}"
#cosine
puts "#{Math.cos(radians)} #{Math.cos(deg2rad(degrees))}"
#tangent
puts "#{Math.tan(radians)} #{Math.tan(deg2rad(degrees))}"
#arcsine
arcsin = Math.asin(Math.sin(radians))
puts "#{arcsin} #{rad2deg(arcsin)}"
#arccosine
arccos = Math.acos(Math.cos(radians))
puts "#{arccos} #{rad2deg(arccos)}"
#arctangent
arctan = Math.atan(Math.tan(radians))
puts "#{arctan} #{rad2deg(arctan)}"

View file

@ -0,0 +1,63 @@
require 'bigdecimal' # BigDecimal
require 'bigdecimal/math' # BigMath
include BigMath # Allow sin(x, prec) instead of BigMath.sin(x, prec).
# Tangent of _x_.
def tan(x, prec)
sin(x, prec) / cos(x, prec)
end
# Arcsine of _y_, domain [-1, 1], range [-pi/2, pi/2].
def asin(y, prec)
# Handle angles with no tangent.
return -PI / 2 if y == -1
return PI / 2 if y == 1
# Tangent of angle is y / x, where x^2 + y^2 = 1.
atan(y / sqrt(1 - y * y, prec), prec)
end
# Arccosine of _x_, domain [-1, 1], range [0, pi].
def acos(x, prec)
# Handle angle with no tangent.
return PI / 2 if x == 0
# Tangent of angle is y / x, where x^2 + y^2 = 1.
a = atan(sqrt(1 - x * x, prec) / x, prec)
if a < 0
a + PI(prec)
else
a
end
end
prec = 52
pi = PI(prec)
degrees = pi / 180 # one degree in radians
b1 = BigDecimal.new "1"
b2 = BigDecimal.new "2"
b3 = BigDecimal.new "3"
f = proc { |big| big.round(50).to_s('F') }
print("Using radians:",
"\n sin(-pi / 6) = ", f[ sin(-pi / 6, prec) ],
"\n cos(3 * pi / 4) = ", f[ cos(3 * pi / 4, prec) ],
"\n tan(pi / 3) = ", f[ tan(pi / 3, prec) ],
"\n asin(-1 / 2) = ", f[ asin(-b1 / 2, prec) ],
"\n acos(-sqrt(2) / 2) = ", f[ acos(-sqrt(b2, prec) / 2, prec) ],
"\n atan(sqrt(3)) = ", f[ atan(sqrt(b3, prec), prec) ],
"\n")
print("Using degrees:",
"\n sin(-30) = ", f[ sin(-30 * degrees, prec) ],
"\n cos(135) = ", f[ cos(135 * degrees, prec) ],
"\n tan(60) = ", f[ tan(60 * degrees, prec) ],
"\n asin(-1 / 2) = ",
f[ asin(-b1 / 2, prec) / degrees ],
"\n acos(-sqrt(2) / 2) = ",
f[ acos(-sqrt(b2, prec) / 2, prec) / degrees ],
"\n atan(sqrt(3)) = ",
f[ atan(sqrt(b3, prec), prec) / degrees ],
"\n")

View file

@ -0,0 +1,13 @@
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)
print "Sine: ";SIN(rad);" ";SIN(deg*d2r)
print "Cosine: ";COS(rad);" ";COS(deg*d2r)
print "Tangent: ";TAN(rad);" ";TAN(deg*d2r)
print
print "Arcsine: ";ASN(SIN(rad));" radians, (or ";ASN(SIN(deg*d2r))*r2d;" degrees)"
print "Arccosine: ";ACS(COS(rad));" radians, (or ";ACS(COS(deg*d2r))*r2d;" degrees)"
print "Arctangent: ";ATN(TAN(rad));" radians, (or ";ATN(TAN(deg*d2r))*r2d;" degrees)"

View file

@ -0,0 +1,31 @@
data _null_;
pi = 4*atan(1);
deg = 30;
rad = pi/6;
k = pi/180;
x = 0.2;
a = sin(rad);
b = sin(deg*k);
put a b;
a = cos(rad);
b = cos(deg*k);
put a b;
a = tan(rad);
b = tan(deg*k);
put a b;
a=arsin(x);
b=arsin(x)/k;
put a b;
a=arcos(x);
b=arcos(x)/k;
put a b;
a=atan(x);
b=atan(x)/k;
put a b;
run;

View file

@ -0,0 +1,37 @@
(define pi (* 4 (atan 1)))
(define radians (/ pi 4))
(define degrees 45)
(display (sin radians))
(display " ")
(display (sin (* degrees (/ pi 180))))
(newline)
(display (cos radians))
(display " ")
(display (cos (* degrees (/ pi 180))))
(newline)
(display (tan radians))
(display " ")
(display (tan (* degrees (/ pi 180))))
(newline)
(define arcsin (asin (sin radians)))
(display arcsin)
(display " ")
(display (* arcsin (/ 180 pi)))
(newline)
(define arccos (acos (cos radians)))
(display arccos)
(display " ")
(display (* arccos (/ 180 pi)))
(newline)
(define arctan (atan (tan radians)))
(display arctan)
(display " ")
(display (* arctan (/ 180 pi)))
(newline)

View file

@ -0,0 +1,17 @@
$ include "seed7_05.s7i";
include "float.s7i";
include "math.s7i";
const proc: main is func
local
const float: radians is PI / 4.0;
const float: degrees is 45.0;
begin
writeln(" radians degrees");
writeln("sine: " <& sin(radians) digits 5 <& sin(degrees * PI / 180.0) digits 5 lpad 9);
writeln("cosine: " <& cos(radians) digits 5 <& cos(degrees * PI / 180.0) digits 5 lpad 9);
writeln("tangent: " <& tan(radians) digits 5 <& tan(degrees * PI / 180.0) digits 5 lpad 9);
writeln("arcsine: " <& asin(0.70710677) digits 5 <& asin(0.70710677) * 180.0 / PI digits 5 lpad 9);
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;

View file

@ -0,0 +1,18 @@
package require Tcl 8.5
proc PI {} {expr {4*atan(1)}}
proc deg2rad d {expr {$d/180*[PI]}}
proc rad2deg r {expr {$r*180/[PI]}}
namespace path ::tcl::mathfunc
proc trig degrees {
set radians [deg2rad $degrees]
puts [sin $radians]
puts [cos $radians]
puts [tan $radians]
set arcsin [asin [sin $radians]]; puts "$arcsin [rad2deg $arcsin]"
set arccos [acos [cos $radians]]; puts "$arccos [rad2deg $arccos]"
set arctan [atan [tan $radians]]; puts "$arctan [rad2deg $arctan]"
}
trig 60.0

View file

@ -0,0 +1,27 @@
include c:\cxpl\codes; \intrinsic 'code' declarations
def Pi = 3.14159265358979323846;
func real ATan(Y); \Arc tangent
real Y;
return ATan2(Y, 1.0);
func real Deg(X); \Convert radians to degrees
real X;
return 57.2957795130823 * X;
func real Rad(X); \Convert degrees to radians
real X;
return X / 57.2957795130823;
real A, B, C;
[A:= Sin(Pi/6.0);
RlOut(0, A); ChOut(0, 9\tab\); RlOut(0, Sin(Rad(30.0))); CrLf(0);
B:= Cos(Pi/6.0);
RlOut(0, B); ChOut(0, 9\tab\); RlOut(0, Cos(Rad(30.0))); CrLf(0);
C:= Tan(Pi/4.0);
RlOut(0, C); ChOut(0, 9\tab\); RlOut(0, Tan(Rad(45.0))); CrLf(0);
RlOut(0, ASin(A)); ChOut(0, 9\tab\); RlOut(0, Deg(ASin(A))); CrLf(0);
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);
]