/* Copyright (c) 1994 Xerox Corporation. All rights reserved. */
#include <doc/copyright.h>
/*
$Id$
$Date$
*
* The ieee float constants here were taken from SunOS 4.1.3
*/
#include <config/PCR←StdDefs.h>
#include <config/PCR←Arch.h>
#include <config/PCR←OS.h>
#include <math.h>
#if defined(PCR←OS←SUNOS4) || defined(PCR←OS←SUNOS5) \
|| defined(PCR←OS←IRIX4) || defined(PCR←OS←IRIX5)
int
PCR←EmuHDieee←Dummy(double x)
{
/* SVID & X/Open */
x = erf(x);
x = erfc(x);
x = gamma(x);
x = hypot(x,x);
x = j0(x);
x = j1(x);
x = jn(11,x);
x = lgamma(x);
x = y0(x);
x = y1(x);
x = yn(11,x);
/* SVID */
x = acosh(x);
x = asinh(x);
x = atanh(x);
return 0;
}
# if defined(PCR←OS←SUNOS4)
int
PCR←EmuHDieee←DummyFPClass(double x)
{
return (int) fp←class(x);
}
# else
int
fp←class(double x)
{
return (int) fpclass(x);
}
# endif
#elif defined(PCR←OS←OS2) || defined(PCR←OS←linux) || defined(PCR←OS←bsdi)
/* don't know what to do here, but skip it for now */
#else
# error ieee float?
#endif
/*
* IEEE double precision constants
*/
static double align←←double = 0.0;
#if defined(PCR←Arch←ENDIAN0123)
/* little-endian */
static long ln2x[] = { 0xfefa39ef, 0x3fe62e42 };
static long ln2hix[] = { 0xfee00000, 0x3fe62e42 };
static long ln2lox[] = { 0x35793c76, 0x3dea39ef };
static long NaNx[] = { 0xffffffff, 0x7fffffff };
static long sNaNx[] = { 0x00000001, 0x7ff00000 };
static long Infx[] = { 0x00000000, 0x7ff00000 };
static long two52x[] = { 0x00000000, 0x43300000 };
static long twom52x[] = { 0x00000000, 0x3cb00000 };
static long PI←RZx[] = { 0x54442d18, 0x400921fb };
static long sqrt2x[] = { 0x667f3bcd, 0x3ff6a09e };/* rounded up */
static long sqrt2p1←hix[] = { 0x333f9de6, 0x4003504f };
static long sqrt2p1←lox[] = { 0xf626cdd5, 0x3ca21165 };
static long fmaxx[] = { 0xffffffff, 0x7fefffff };
static long fminx[] = { 0x00000001, 0x00000000 };
static long fminnx[] = { 0x00000000, 0x00100000 };
static long fmaxsx[] = { 0xffffffff, 0x000fffff };
static long lnovftx[] = { 0xfefa39ef, 0x40862e42 };/* chopped */
static long lnunftx[] = { 0xd52d3052, 0xc0874910 };/* ln(minf/2) chop*/
static long invln2x[] = { 0x652b82fe, 0x3ff71547 };
#elif defined(PCR←ARCH←ENDIAN3210)
/* big-endian */
static long ln2x[] = { 0x3fe62e42, 0xfefa39ef };
static long ln2hix[] = { 0x3fe62e42, 0xfee00000 };
static long ln2lox[] = { 0x3dea39ef, 0x35793c76 };
static long NaNx[] = { 0x7fffffff, 0xffffffff };
static long sNaNx[] = { 0x7ff00000, 0x00000001 };
static long Infx[] = { 0x7ff00000, 0x00000000 };
static long two52x[] = { 0x43300000, 0x00000000 };
static long twom52x[] = { 0x3cb00000, 0x00000000 };
static long PI←RZx[] = { 0x400921fb, 0x54442d18 };
static long sqrt2x[] = { 0x3ff6a09e, 0x667f3bcd };/* rounded up */
static long sqrt2p1←hix[] = { 0x4003504f, 0x333f9de6 };
static long sqrt2p1←lox[] = { 0x3ca21165, 0xf626cdd5 };
static long fmaxx[] = { 0x7fefffff, 0xffffffff };
static long fminx[] = { 0x00000000, 0x00000001 };
static long fminnx[] = { 0x00100000, 0x00000000 };
static long fmaxsx[] = { 0x000fffff, 0xffffffff };
static long lnovftx[] = { 0x40862e42, 0xfefa39ef };/* chopped */
static long lnunftx[] = { 0xc0874910, 0xd52d3052 };/* ln(minf/2) chop*/
static long invln2x[] = { 0x3ff71547, 0x652b82fe };
#else
# error constants not known
#endif
#define ln2 (*(double*)ln2x)
#define NaN (*(double*)NaNx)
#define sNaN (*(double*)sNaNx)
#define Inf (*(double*)Infx)
#define two52 (*(double*)two52x)
#define twom52 (*(double*)twom52x)
#define ln2hi (*(double*)ln2hix)
#define ln2lo (*(double*)ln2lox)
#define PI←RZ (*(double*)PI←RZx)
#define sqrt2 (*(double*)sqrt2x)
#define sqrt2p1←hi (*(double*)sqrt2p1←hix)
#define sqrt2p1←lo (*(double*)sqrt2p1←lox)
#define fmax (*(double*)fmaxx)
#define fmin (*(double*)fminx)
#define fminn (*(double*)fminnx)
#define fmaxs (*(double*)fmaxsx)
#define lnovft (*(double*)lnovftx)
#define lnunft (*(double*)lnunftx)
#define invln2 (*(double*)invln2x)
double
min←subnormal(void)
{
return fmin;
}
double
max←subnormal(void)
{
return fmaxs;
}
double
min←normal(void)
{
return fminn;
}
double
max←normal(void)
{
return fmax;
}
double
infinity(void)
{
return Inf;
}
double
quiet←nan(long n)
{
return NaN;
}
double
signaling←nan(long n)
{
return sNaN;
}
/*
$Log$
*/