File:  [Research Unix] / researchv10dc / cmd / icon / pi / pil / trig.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 17:21:34 2018 UTC (8 years, 3 months ago) by root
Branches: belllabs, MAIN
CVS tags: researchv10, HEAD
researchv10 Dan Cross

/*
 *	TRIG
 *
 *	Trigonometric functions
 *
 *	Ralph E. Griswold and Stephen B. Wampler
 *
 *	Last modified 5/2/86 by Ralph E. Griswold
 *
 */

#include "../h/rt.h"
#include <errno.h>

int errno;

/*
 * sin(x), x in radians
 */
FncDcl(sin,1)
   {
   int t;
   union numeric r;
   double sin();
   
   if ((t = cvreal(&Arg1, &r)) == NULL) runerr(102, &Arg1);
   mkreal(sin(r.real),&Arg0);
   Return;
   }

/*
 * cos(x), x in radians
 */
FncDcl(cos,1)
   {
   int t;
   union numeric r;
   double cos();
   
   if ((t = cvreal(&Arg1, &r)) == NULL) runerr(102, &Arg1);
   mkreal(cos(r.real),&Arg0);
   Return;
   }

/*
 * tan(x), x in radians
 */
FncDcl(tan,1)
   {
   int t;
   double y;
   union numeric r;
   double tan();
   
   if ((t = cvreal(&Arg1, &r)) == NULL) runerr(102, &Arg1);
   y = tan(r.real);
   if (errno == ERANGE) runerr(252, NULL);
   mkreal(y,&Arg0);
   Return;
   }

/*
 * acos(x), x in radians
 */
FncDcl(acos,1)
   {
   int t;
   double y;
   union numeric r;
   double acos();
   
   if ((t = cvreal(&Arg1, &r)) == NULL) runerr(102, &Arg1);
   y = acos(r.real);
   if (errno == EDOM) runerr(251, NULL);
   mkreal(y,&Arg0);
   Return;
   }

/*
 * asin(x), x in radians
 */
FncDcl(asin,1)
   {
   int t;
   double y;
   union numeric r;
   double asin();
   
   if ((t = cvreal(&Arg1, &r)) == NULL) runerr(102, &Arg1);
   y = asin(r.real);
   if (errno == EDOM) runerr(251, NULL);
   mkreal(y,&Arg0);
   Return;
   }

/*
 * atan(x), x in radians
 */
FncDcl(atan,1)
   {
   int t;
   union numeric r;
   double atan();
   
   if ((t = cvreal(&Arg1, &r)) == NULL) runerr(102, &Arg1);
   mkreal(atan(r.real),&Arg0);
   Return;
   }

/*
 * atan2(x,y), x, y in radians
 */
FncDcl(atan2,2)
   {
   int t;
   union numeric r1, r2;
   double atan2();

   if ((t = cvreal(&Arg2, &r2)) == NULL) runerr(102, &Arg2);
   if ((t = cvreal(&Arg1, &r1)) == NULL) runerr(102, &Arg1);
   mkreal(atan2(r1.real,r2.real),&Arg0);
   Return;
   }

#define PI 3.14159

/*
 * dtor(x), x in degrees
 */
FncDcl(dtor,1)
   {
   union numeric r;

   if (cvreal(&Arg1, &r) == NULL) runerr(102, &Arg1);
   mkreal(r.real * PI / 180, &Arg0);
   Return;
   }

/*
 * rtod(x), x in radians
 */
FncDcl(rtod,1)
   {
   union numeric r;

   if (cvreal(&Arg1, &r) == NULL) runerr(102, &Arg1);
   mkreal(r.real * 180 / PI, &Arg0);
   Return;
   }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.