Sindbad~EG File Manager

Current Path : /usr/home/beeson/MathXpert/prover/
Upload File :
Current File : /usr/home/beeson/MathXpert/prover/trigatr.c

/* M. Beeson, for Mathpert */
/* Original date 5.5.97 */
/* Last modified 6.14.98 */
/* 3.20.06 removed duplicate include polynoms.h 
5.5.13 changed malloc.h to stdlib.h
*/

#include <assert.h>
#include <stdlib.h>   /* alloca */
#include <math.h>     /* fabs   */
#include "globals.h"
#include "prover.h"
#include "polynoms.h"
#include "cancel.h"
#include "order.h"
#include "deriv.h"
#include "eqn.h"
#include "algaux.h"
#include "trigpoly.h"
#include "trigdom.h"
#include "reset.h"
#include "userfunc.h"
#include "sturm.h"        /* nroots */
#include "pvalaux.h"      /* obviously_positive */
#include "polyquo.h"      /* make_polyquo */
#include "psubst.h"
#include "islinear.h"
#include "factor.h"  /* sqrt_aux */
#include "deval.h"
#include "periodic.h"  /* periodic_in */
#include "trigatr.h"   /* trig_arctrig_singularities */
#include "trigsimp.h"
/*_____________________________________________________________*/
int trig_arctrig_singularities(unsigned short g, unsigned short h, term x, term *ans, term *jumps)
/* g is a trig functor, h is an arctrig functor.
Find the singularities and jumps of g(h(x)) and return
them in *ans and *jumps.  Return 0 for success, 1 for failure.
*/
{ int err;
  term temp;
  switch(g)
     { case TAN:
          switch(h)
              { case ATAN:
                   return singularities(x,ans,jumps);
                case ACOS:
                   /* tan(arccos x) = sqrt(1-x^2)/x */
                   err = singularities(x,&temp,jumps);
                   if(err)
                      return 1;
                   return zeroes(x,ans);
                case ACSC:
                   /* tan(acsc x) = 1/sqrt(x^2-1) */
                   /* fall through */
                case ASIN:
                   /* tan(asin x) = x / sqrt(1-x^2) */
                   err = singularities(x,&temp,jumps);
                   if(err)
                      return 1;
                   return zeroes(sum(make_power(x,two),minusone),ans);
                case ASEC:
                   /* tan(asec x) = sqrt(x^2-1) */
                   return singularities(x,ans,jumps);
                case ACOT:
                   /* tan(acot x) = 1/x */
                   err = singularities(x,&temp,jumps);
                   if(err)
                      return 1;
                   return zeroes(x,ans);
                default:
                   assert(0);
              }
          break;
       case SIN:
          switch(h)
             { case ASIN:
                  return singularities(x,ans,jumps);
               case ACOS:
                  /* sin(arccos x) = sqrt(1-x^2) */
                  err = singularities(x,ans,jumps);
                  if(err)
                     return 1;
                  *ans = falseterm;
                  return 0;
               case ATAN:
                  /* sin(arctan x) = x/sqrt(x^2+1) */
                  /* for large x this is appx 1-1/(2x^2) */
                  err = singularities(x,ans,jumps);
                  if(err)
                     return 1;
                  *ans = falseterm;
                  return 0;

               case ASEC:
                  /* sin(arcsec x) = sqrt(x^2-1) */
                  return singularities(x,ans,jumps);
               case ACSC:
                  /* sin(arccsc x) = 1/x */
                  err = singularities(x,&temp,jumps);
                  if(err)
                     return 1;
                  return zeroes(x,ans);
               case ACOT:
                  /* sin(arccot x) = 1/sqrt(x^2 + 1) */
                  err = singularities(x,ans,jumps);
                  if(err)
                     return 1;
                  *ans = falseterm;
                  return 0;
             }
          break;
       case COS:
          switch(h)
             { case ACOS:
                  /* cos(arccos x) = x */
                  return singularities(x,ans,jumps);
               case ASIN:
                  /* cos(arcsin x) = sqrt(1-x^2) */
                  err = singularities(x,&temp,jumps);
                  if(err)
                     return 1;
                  *ans = falseterm;
                  return 0;
               case ATAN:
                  /* cos(arctan x) = 1/sqrt(x^2+1) */
                  return singularities(x,ans,jumps);
               case ACOT:
                  /* cos(arccot x) = x/sqrt(x^2+1) */
                  err = singularities(x,ans,jumps);
                  if(err)
                     return 1;
                  *ans = falseterm;
                  return 0;
               case ACSC:
                  /* cos(arccsc x) = sqrt(x^2-1)/x */
                  err = singularities(x,ans,jumps);
                  if(err)
                     return 1;
                  return zeroes(x,ans);
               case ASEC:
                  /* cos(arcsec x) = 1/x */
                  err = singularities(x,&temp,jumps);
                  if(err)
                     return 1;
                  return zeroes(x,ans);
               default:
                 assert(0);
             }
          break;
       case SEC:
          switch(h)
             { case ACOS:
                  /* sec(arccos x) = 1/x */
                  err =  singularities(x,ans,jumps);
                  if(err)
                     return 1;
                  return zeroes(x,ans);
               case ASIN:
                  /* sec(arcsin x) = 1/sqrt(1-x^2) */
                  err = singularities(x,&temp,jumps);
                  if(err)
                     return 1;
                  *ans = falseterm;
                  return 0;
               case ATAN:
                  /* sec(arctan x) = sqrt(x^2+1) */
                  return singularities(x,ans,jumps);
               case ACOT:
                  /* sec(arccot x) = sqrt(x^2+1)/x */
                  err = singularities(x,ans,jumps);
                  if(err)
                     return 1;
                  *ans = falseterm;
                  return 0;
               case ACSC:
                  /* sec(arccsc x) = x/sqrt(x^2-1) */
                  err = singularities(x,ans,jumps);
                  if(err)
                     return 1;
                  return zeroes(sum(make_power(x,two),minusone),ans);
               case ASEC:
                  /* sec(arcsec x) = x */
                  return singularities(x,&temp,jumps);
               default:
                 assert(0);
             }
          break;
       case CSC:
          switch(h)
             { case ASIN:
               /* csc(arcsin x) = 1/x */
                  err = singularities(x,ans,jumps);
                  if(err)
                     return 1;
                  return zeroes(x,ans);
               case ACOS:
                  /* csc(arccos x) = 1/ sqrt(1-x^2) */
                  err = singularities(x,ans,jumps);
                  if(err)
                     return 1;
                  *ans = falseterm;
                  return 0;
               case ATAN:
                  /* csc(arctan x) = sqrt(x^2+1)/x */
                  err = singularities(x,ans,jumps);
                  if(err)
                     return 1;
                  *ans = falseterm;
                  return 0;
               case ASEC:
                  /* csc(arcsec x) = 1/sqrt(x^2-1) */
                  err = singularities(x,ans,jumps);
                  if(err)
                     return 1;
                  return zeroes(sum(make_power(x,two),minusone),ans);
               case ACSC:
                  /* csc(arccsc x) = x */
                  return singularities(x,&temp,jumps);
               case ACOT:
                  /* csc(arccot x) = sqrt(x^2 + 1) */
                  err = singularities(x,ans,jumps);
                  if(err)
                     return 1;
                  *ans = falseterm;
                  return 0;
               default:
                  assert(0);
             }
          break;
       case COT:
          switch(h)
              { case ATAN:
                   /* cot(arctan x) = 1/x */
                   err = singularities(x,ans,jumps);
                   if(err)
                      return 1;
                   return zeroes(x,ans);
                case ACOS:
                   /* cot(arccos x) = x/sqrt(1-x^2) */
                   err = singularities(x,&temp,jumps);
                   if(err)
                      return 1;
                   return zeroes(sum(make_power(x,two),minusone),ans);
                case ACSC:
                   /* cot(acsc x) = sqrt(x^2-1) */
                   return singularities(x,ans,jumps);
                case ASIN:
                   /* cot(asin x) = sqrt(1-x^2)/x */
                   err = singularities(x,&temp,jumps);
                   if(err)
                      return 1;
                   return zeroes(x,ans);
                case ASEC:
                   /* cot(asec x) = 1/sqrt(x^2-1) */
                   err = singularities(x,ans,jumps);
                   if(err)
                      return 1;
                   return zeroes(sum(make_power(x,two),minusone),ans);
                case ACOT:
                   /* cot(acot x) = x */
                   return singularities(x,&temp,jumps);
                default:
                   assert(0);
              }
     }
  return 1;
}

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists