// This may look like C code, but it is really -*- C++ -*- /* Copyright (C) 1988 Free Software Foundation written by Doug Lea (dl@rocky.oswego.edu) This file is part of the GNU C++ Library. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. $Id: math.h,v 1.2 1993/08/02 17:22:08 mycroft Exp $ */ #ifndef _math_h #ifdef __GNUG__ #pragma interface #endif #define _math_h 1 #if defined(hp300) && defined(__HAVE_FPU__) #define __HAVE_68881__ 1 #endif #if defined(masscomp) #define __HAVE_68881__ 1 #endif #ifdef __HAVE_68881__ /* MC68881/2 Floating-Point Coprocessor */ extern "C" { /* fill in what we've left out */ #include double acosh(double); double asinh(double); double cbrt(double); double copysign(double,double); double erf(double); double erfc(double); double finite(double); double gamma(double); double hypot(double,double); double infnan(int); int isinf(double); int isnan(double); double j0(double); double j1(double); double jn(int, double); double lgamma(double); double y0(double); double y1(double); double yn(int, double); double aint(double); double anint(double); int irint(double); int nint(double); } /* Please add inline asm code for other machines here! */ #else extern "C" { #include <_G_config.h> double acos(double); double acosh(double); double asin(double); double asinh(double); double atan(double); double atan2(double, double); double atanh(double); double cbrt(double); double ceil(double); double copysign(double,double); double cos(double); double cosh(double); double drem(double,double); double erf(double); double erfc(double); double exp(double); double expm1(double); double fabs(double); int finite(double); double floor(double); double fmod(double, double); double frexp(double, int*); double gamma(double); double hypot(double,double); double infnan(int); #if !defined(sequent) && !defined(DGUX) &&!defined(sony) && !defined(masscomp) && !defined(hpux) /* see below */ int isinf(double); int isnan(double); #endif double j0(double); double j1(double); double jn(int, double); double ldexp(double, int); double lgamma(double); double log(double); double log10(double); double log1p(double); double logb(double); double modf(double, double*); double pow(double, double); double rint(double); double scalb _G_ARGS((double, int)); double sin(double); double sinh(double); double sqrt(double); double tan(double); double tanh(double); double y0(double); double y1(double); double yn(int, double); double aint(double); double anint(double); int irint(double); int nint(double); } #endif /* libg++ doesn't use this since it is not available on some systems */ /* the following ifdef is just for compiling OOPS */ #ifndef DONT_DECLARE_EXCEPTION struct libm_exception { int type; char* name; double arg1, arg2, retval; }; #define DOMAIN 1 #define SING 2 #define OVERFLOW 3 #define UNDERFLOW 4 #define TLOSS 5 #define PLOSS 6 extern "C" int matherr(libm_exception*); #endif #include /* On some systems, HUGE ought to be MAXFLOAT or IEEE infinity */ #ifndef HUGE #define HUGE DBL_MAX #endif #ifndef HUGE_VAL #define HUGE_VAL DBL_MAX #endif /* sequents don't supply these. The following should suffice */ #if defined(sequent) || defined(DGUX) || defined(sony) || defined(masscomp) \ || defined(hpux) #include static inline int isnan(double x) { return x != x; } static inline int isinf(double x) { return x > DBL_MAX || x < -DBL_MAX; } #endif /* These seem to be sun & sysV names of these constants */ #ifndef M_E #define M_E 2.7182818284590452354 #endif #ifndef M_LOG2E #define M_LOG2E 1.4426950408889634074 #endif #ifndef M_LOG10E #define M_LOG10E 0.43429448190325182765 #endif #ifndef M_LN2 #define M_LN2 0.69314718055994530942 #endif #ifndef M_LN10 #define M_LN10 2.30258509299404568402 #endif #ifndef M_PI #define M_PI 3.14159265358979323846 #endif #ifndef M_PI_2 #define M_PI_2 1.57079632679489661923 #endif #ifndef M_1_PI #define M_1_PI 0.31830988618379067154 #endif #ifndef M_PI_4 #define M_PI_4 0.78539816339744830962 #endif #ifndef M_2_PI #define M_2_PI 0.63661977236758134308 #endif #ifndef M_2_SQRTPI #define M_2_SQRTPI 1.12837916709551257390 #endif #ifndef M_SQRT2 #define M_SQRT2 1.41421356237309504880 #endif #ifndef M_SQRT1_2 #define M_SQRT1_2 0.70710678118654752440 #endif #ifndef PI // as in stroustrup #define PI M_PI #endif #ifndef PI2 #define PI2 M_PI_2 #endif #endif