Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ atan(3M) — mips UMIPS RISC/os 5.01

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

hypot(3M)

math(3M)

sqrt(3M)



SIN(3M)             RISC/os Reference Manual              SIN(3M)



NAME
     sin, cos, tan, fsin, fcos, ftan, asin, acos, atan, facos,
          fasin, fatan, atan2, fatan2 - trigonometric functions
          and their inverses

SYNOPSIS
     #include <math.h>

     double sin(x)
     double x;

     float fsin(float x)
     float x;

     double cos(x)
     double x;

     float fcos(float x)
     float x;

     double tan(float x)
     double x;

     float ftan(float x)
     float x;

     double asin(x)
     double x;

     float fasin(float x)
     float x;

     double acos(x)
     double x;

     float facos(float x)
     float x;

     double atan(x)
     double x;

     float fatan(float x)
     float x;

     double atan2(y,x)
     double y,x;

     float fatan2(float y,float x)
     float y,x;

DESCRIPTION
     sin, cos and tan return trigonometric functions of radian



                        Printed 11/19/92                   Page 1





SIN(3M)             RISC/os Reference Manual              SIN(3M)



     arguments x for double data types.  fsin, fcos and ftan do
     the same for float data types.

     asin and fasin returns the arc sine in the range -pi/2 to
     pi/2 for double and float data types respectively.

     acos and facos returns the arc cosine in the range 0 to pi
     for double and float data types respectively.

     atan  and fatan returns the arc tangent in the range -pi/2
     to pi/2 for double and float data types respectively.

     atan2 and fatan2 returns the arctangent of y/x in the range
     -pi to pi, using the signs of both arguments to determine
     the quadrant of the return value for double and float data
     types respectively.

DIAGNOSTICS
     If |x| > 1 then asin(x) and acos(x) will return the default
     quiet NaN.

NOTES
     atan2 defines atan2(0,0) = 0.  The reasons for assigning a
     value to atan2(0,0) are these:

     (1) Programs that test arguments to avoid computing
         atan2(0,0) must be indifferent to its value.  Programs
         that require it to be invalid are vulnerable to diverse
         reactions to that invalidity on diverse computer sys-
         tems.

     (2) atan2 is used mostly to convert from rectangular (x,y)
         to polar (r,theta) coordinates that must satisfy x =
         r*cos theta and y = r*sin theta.  These equations are
         satisfied when (x=0,y=0) is mapped to (r=0,theta=0) In
         general, conversions to polar coordinates should be com-
         puted thus:
                  r:= hypot(x,y);      ... := sqrt(x*x+y*y)
              theta:= atan2(y,x).

     (3) The foregoing formulas need not be altered to cope in a
         reasonable way with signed zeros and infinities on a
         machine, such as MIPS machines, that conforms to IEEE
         754; the versions of hypot and atan2 provided for such a
         machine are designed to handle all cases.  That is why
         atan2(+0,-0) = +pi, for instance.  In general the formu-
         las above are equivalent to these:
         r := sqrt(x*x+y*y); if r = 0 then x := copysign(1,x);
         if x > 0  then theta := 2*atan(y/(r+x))
                   else theta := 2*atan((r-x)/y);
     except if r is infinite then atan2 will yield an appropriate
     multiple of pi/4 that would otherwise have to be obtained by



 Page 2                 Printed 11/19/92





SIN(3M)             RISC/os Reference Manual              SIN(3M)



     taking limits.

ERROR (due to Roundoff etc.) for
     Let P stand for the number stored in the computer in place
     of pi = 3.14159 26535 89793 23846 26433 ... .  Let "trig"
     stand for one of "sin", "cos" or "tan".  Then the expression
     "trig(x)" in a program actually produces an approximation to
     trig(x*pi/P), and "atrig(x)" approximates (P/pi)*atrig(x).
     The approximations are close.

     In the codes that run on MIPS machines, P differs from pi by
     a fraction of an ulp; the difference matters only if the
     argument x is huge, and even then the difference is likely
     to be swamped by the uncertainty in x.  Besides, every tri-
     gonometric identity that does not involve pi explicitly is
     satisfied equally well regardless of whether P = pi.  For
     instance, sin(x)**2+cos(x)**2 = 1 and
     sin(2x) = 2sin(x)cos(x) to within a few ulps no matter how
     big x may be.  Therefore the difference between P and pi is
     most unlikely to affect scientific and engineering computa-
     tions.

SEE ALSO
     hypot(3M), math(3M), sqrt(3M).

AUTHOR
     Robert P. Corbett, W. Kahan, Stuart I. McDonald, Peter Tang
     and, for the codes for IEEE 754, Dr. Kwok-Choi Ng.



























                        Printed 11/19/92                   Page 3



Typewritten Software • bear@typewritten.org • Edmonds, WA 98026