NetBSD/gnu/lib/libg++/g++-include/math.h

224 lines
5.1 KiB
C++

// 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 <math-68881.h>
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 <float.h>
/* 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 <float.h>
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