mirror of
https://github.com/corda/corda.git
synced 2025-01-08 14:03:06 +00:00
9441de4c38
This release is used in conjunction with the linux-sgx-driver Intial release: https://github.com/01org/linux-sgx-driver commit-id: 0e865ce5e6b297a787bcdc12d98bada8174be6d7 Intel-id: 33399 Signed-off-by: Angie Chinchilla <angie.v.chinchilla@intel.com>
431 lines
14 KiB
C
431 lines
14 KiB
C
/* $OpenBSD: math.h,v 1.27 2010/12/14 11:16:15 martynas Exp $ */
|
|
/*
|
|
* ====================================================
|
|
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
|
*
|
|
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
|
* Permission to use, copy, modify, and distribute this
|
|
* software is freely granted, provided that this notice
|
|
* is preserved.
|
|
* ====================================================
|
|
*/
|
|
|
|
/*
|
|
* from: @(#)fdlibm.h 5.1 93/09/24
|
|
*/
|
|
|
|
#ifndef _MATH_H_
|
|
#define _MATH_H_
|
|
|
|
#include <sys/_types.h>
|
|
#include <sys/cdefs.h>
|
|
#include <sys/limits.h>
|
|
|
|
#include <float.h>
|
|
|
|
typedef __float_t float_t;
|
|
typedef __double_t double_t;
|
|
|
|
#define FP_NAN 0x00
|
|
#define FP_INFINITE 0x01
|
|
#define FP_ZERO 0x02
|
|
#define FP_SUBNORMAL 0x03
|
|
#define FP_NORMAL 0x04
|
|
|
|
#define FP_ILOGB0 (-INT_MAX - 1)
|
|
#define FP_ILOGBNAN (-INT_MAX - 1)
|
|
|
|
#define fpclassify(x) \
|
|
((sizeof (x) == sizeof (float)) ? \
|
|
__fpclassifyf(x) \
|
|
: (sizeof (x) == sizeof (double)) ? \
|
|
__fpclassify(x) \
|
|
: __fpclassifyl(x))
|
|
#define isfinite(x) \
|
|
((sizeof (x) == sizeof (float)) ? \
|
|
__isfinitef(x) \
|
|
: (sizeof (x) == sizeof (double)) ? \
|
|
__isfinite(x) \
|
|
: __isfinitel(x))
|
|
#define isnormal(x) \
|
|
((sizeof (x) == sizeof (float)) ? \
|
|
__isnormalf(x) \
|
|
: (sizeof (x) == sizeof (double)) ? \
|
|
__isnormal(x) \
|
|
: __isnormall(x))
|
|
#define signbit(x) \
|
|
((sizeof (x) == sizeof (float)) ? \
|
|
__signbitf(x) \
|
|
: (sizeof (x) == sizeof (double)) ? \
|
|
__signbit(x) \
|
|
: __signbitl(x))
|
|
#define isinf(x) \
|
|
((sizeof (x) == sizeof (float)) ? \
|
|
__isinff(x) \
|
|
: (sizeof (x) == sizeof (double)) ? \
|
|
__isinf(x) \
|
|
: __isinfl(x))
|
|
#define isnan(x) \
|
|
((sizeof (x) == sizeof (float)) ? \
|
|
__isnanf(x) \
|
|
: (sizeof (x) == sizeof (double)) ? \
|
|
__isnan(x) \
|
|
: __isnanl(x))
|
|
|
|
#define isgreater(x, y) (!isunordered((x), (y)) && (x) > (y))
|
|
#define isgreaterequal(x, y) (!isunordered((x), (y)) && (x) >= (y))
|
|
#define isless(x, y) (!isunordered((x), (y)) && (x) < (y))
|
|
#define islessequal(x, y) (!isunordered((x), (y)) && (x) <= (y))
|
|
#define islessgreater(x, y) (!isunordered((x), (y)) && ((x) > (y) || (y) > (x)))
|
|
#define isunordered(x, y) (isnan(x) || isnan(y))
|
|
|
|
__BEGIN_DECLS
|
|
|
|
extern char __infinity[];
|
|
#define HUGE_VAL (*(double *)(void *)__infinity)
|
|
#define HUGE_VALF ((float)HUGE_VAL)
|
|
#define HUGE_VALL ((long double)HUGE_VAL)
|
|
#define INFINITY HUGE_VALF
|
|
extern char __nan[];
|
|
#define NAN (*(float *)(void *)__nan)
|
|
|
|
/*
|
|
* ANSI/POSIX
|
|
*/
|
|
double _TLIBC_CDECL_ acos(double);
|
|
double _TLIBC_CDECL_ asin(double);
|
|
double _TLIBC_CDECL_ atan(double);
|
|
double _TLIBC_CDECL_ atan2(double, double);
|
|
double _TLIBC_CDECL_ cos(double);
|
|
double _TLIBC_CDECL_ sin(double);
|
|
double _TLIBC_CDECL_ tan(double);
|
|
|
|
double _TLIBC_CDECL_ cosh(double);
|
|
double _TLIBC_CDECL_ sinh(double);
|
|
double _TLIBC_CDECL_ tanh(double);
|
|
|
|
double _TLIBC_CDECL_ exp(double);
|
|
double _TLIBC_CDECL_ frexp(double, int *);
|
|
double _TLIBC_CDECL_ ldexp(double, int);
|
|
double _TLIBC_CDECL_ log(double);
|
|
double _TLIBC_CDECL_ log10(double);
|
|
double _TLIBC_CDECL_ modf(double, double *);
|
|
|
|
double _TLIBC_CDECL_ pow(double, double);
|
|
double _TLIBC_CDECL_ sqrt(double);
|
|
|
|
double _TLIBC_CDECL_ ceil(double);
|
|
double _TLIBC_CDECL_ fabs(double);
|
|
double _TLIBC_CDECL_ floor(double);
|
|
double _TLIBC_CDECL_ fmod(double, double);
|
|
|
|
/*
|
|
* C99
|
|
*/
|
|
double _TLIBC_CDECL_ acosh(double);
|
|
double _TLIBC_CDECL_ asinh(double);
|
|
double _TLIBC_CDECL_ atanh(double);
|
|
|
|
double _TLIBC_CDECL_ exp2(double);
|
|
double _TLIBC_CDECL_ expm1(double);
|
|
int _TLIBC_CDECL_ ilogb(double);
|
|
double _TLIBC_CDECL_ log1p(double);
|
|
double _TLIBC_CDECL_ log2(double);
|
|
double _TLIBC_CDECL_ logb(double);
|
|
double _TLIBC_CDECL_ scalbn(double, int);
|
|
double _TLIBC_CDECL_ scalbln(double, long int);
|
|
|
|
double _TLIBC_CDECL_ cbrt(double);
|
|
double _TLIBC_CDECL_ hypot(double, double);
|
|
|
|
double _TLIBC_CDECL_ erf(double);
|
|
double _TLIBC_CDECL_ erfc(double);
|
|
double _TLIBC_CDECL_ lgamma(double);
|
|
double _TLIBC_CDECL_ tgamma(double);
|
|
|
|
double _TLIBC_CDECL_ nearbyint(double);
|
|
double _TLIBC_CDECL_ rint(double);
|
|
long int _TLIBC_CDECL_ lrint(double);
|
|
long long int _TLIBC_CDECL_ llrint(double);
|
|
double _TLIBC_CDECL_ round(double);
|
|
long int _TLIBC_CDECL_ lround(double);
|
|
long long int _TLIBC_CDECL_ llround(double);
|
|
double _TLIBC_CDECL_ trunc(double);
|
|
|
|
double _TLIBC_CDECL_ remainder(double, double);
|
|
double _TLIBC_CDECL_ remquo(double, double, int *);
|
|
|
|
double _TLIBC_CDECL_ copysign(double, double);
|
|
double _TLIBC_CDECL_ nan(const char *);
|
|
double _TLIBC_CDECL_ nextafter(double, double);
|
|
|
|
double _TLIBC_CDECL_ fdim(double, double);
|
|
double _TLIBC_CDECL_ fmax(double, double);
|
|
double _TLIBC_CDECL_ fmin(double, double);
|
|
|
|
double _TLIBC_CDECL_ fma(double, double, double);
|
|
|
|
/*
|
|
* Float versions of C99 functions
|
|
*/
|
|
|
|
float _TLIBC_CDECL_ acosf(float);
|
|
float _TLIBC_CDECL_ asinf(float);
|
|
float _TLIBC_CDECL_ atanf(float);
|
|
float _TLIBC_CDECL_ atan2f(float, float);
|
|
float _TLIBC_CDECL_ cosf(float);
|
|
float _TLIBC_CDECL_ sinf(float);
|
|
float _TLIBC_CDECL_ tanf(float);
|
|
|
|
float _TLIBC_CDECL_ acoshf(float);
|
|
float _TLIBC_CDECL_ asinhf(float);
|
|
float _TLIBC_CDECL_ atanhf(float);
|
|
float _TLIBC_CDECL_ coshf(float);
|
|
float _TLIBC_CDECL_ sinhf(float);
|
|
float _TLIBC_CDECL_ tanhf(float);
|
|
|
|
float _TLIBC_CDECL_ expf(float);
|
|
float _TLIBC_CDECL_ exp2f(float);
|
|
float _TLIBC_CDECL_ expm1f(float);
|
|
float _TLIBC_CDECL_ frexpf(float, int *);
|
|
int _TLIBC_CDECL_ ilogbf(float);
|
|
float _TLIBC_CDECL_ ldexpf(float, int);
|
|
float _TLIBC_CDECL_ logf(float);
|
|
float _TLIBC_CDECL_ log10f(float);
|
|
float _TLIBC_CDECL_ log1pf(float);
|
|
float _TLIBC_CDECL_ log2f(float);
|
|
float _TLIBC_CDECL_ logbf(float);
|
|
float _TLIBC_CDECL_ modff(float, float *);
|
|
float _TLIBC_CDECL_ scalbnf(float, int);
|
|
float _TLIBC_CDECL_ scalblnf(float, long int);
|
|
|
|
float _TLIBC_CDECL_ cbrtf(float);
|
|
float _TLIBC_CDECL_ fabsf(float);
|
|
float _TLIBC_CDECL_ hypotf(float, float);
|
|
float _TLIBC_CDECL_ powf(float, float);
|
|
float _TLIBC_CDECL_ sqrtf(float);
|
|
|
|
float _TLIBC_CDECL_ erff(float);
|
|
float _TLIBC_CDECL_ erfcf(float);
|
|
float _TLIBC_CDECL_ lgammaf(float);
|
|
float _TLIBC_CDECL_ tgammaf(float);
|
|
|
|
float _TLIBC_CDECL_ ceilf(float);
|
|
float _TLIBC_CDECL_ floorf(float);
|
|
float _TLIBC_CDECL_ nearbyintf(float);
|
|
|
|
float _TLIBC_CDECL_ rintf(float);
|
|
long int _TLIBC_CDECL_ lrintf(float);
|
|
long long int _TLIBC_CDECL_ llrintf(float);
|
|
float _TLIBC_CDECL_ roundf(float);
|
|
long int _TLIBC_CDECL_ lroundf(float);
|
|
long long int _TLIBC_CDECL_ llroundf(float);
|
|
float _TLIBC_CDECL_ truncf(float);
|
|
|
|
float _TLIBC_CDECL_ fmodf(float, float);
|
|
float _TLIBC_CDECL_ remainderf(float, float);
|
|
float _TLIBC_CDECL_ remquof(float, float, int *);
|
|
|
|
float _TLIBC_CDECL_ copysignf(float, float);
|
|
float _TLIBC_CDECL_ nanf(const char *);
|
|
float _TLIBC_CDECL_ nextafterf(float, float);
|
|
|
|
float _TLIBC_CDECL_ fdimf(float, float);
|
|
float _TLIBC_CDECL_ fmaxf(float, float);
|
|
float _TLIBC_CDECL_ fminf(float, float);
|
|
|
|
float _TLIBC_CDECL_ fmaf(float, float, float);
|
|
|
|
/*
|
|
* Long double versions of C99 functions
|
|
*/
|
|
|
|
/* Macros defining long double functions to be their double counterparts
|
|
* (long double is synonymous with double in this implementation).
|
|
*/
|
|
|
|
long double _TLIBC_CDECL_ acosl(long double);
|
|
long double _TLIBC_CDECL_ asinl(long double);
|
|
long double _TLIBC_CDECL_ atanl(long double);
|
|
long double _TLIBC_CDECL_ atan2l(long double, long double);
|
|
long double _TLIBC_CDECL_ cosl(long double);
|
|
long double _TLIBC_CDECL_ sinl(long double);
|
|
long double _TLIBC_CDECL_ tanl(long double);
|
|
|
|
long double _TLIBC_CDECL_ acoshl(long double);
|
|
long double _TLIBC_CDECL_ asinhl(long double);
|
|
long double _TLIBC_CDECL_ atanhl(long double);
|
|
long double _TLIBC_CDECL_ coshl(long double);
|
|
long double _TLIBC_CDECL_ sinhl(long double);
|
|
long double _TLIBC_CDECL_ tanhl(long double);
|
|
|
|
long double _TLIBC_CDECL_ expl(long double);
|
|
long double _TLIBC_CDECL_ exp2l(long double);
|
|
long double _TLIBC_CDECL_ expm1l(long double);
|
|
long double _TLIBC_CDECL_ frexpl(long double, int *);
|
|
int _TLIBC_CDECL_ ilogbl(long double);
|
|
long double _TLIBC_CDECL_ ldexpl(long double, int);
|
|
long double _TLIBC_CDECL_ logl(long double);
|
|
long double _TLIBC_CDECL_ log10l(long double);
|
|
long double _TLIBC_CDECL_ log1pl(long double);
|
|
long double _TLIBC_CDECL_ log2l(long double);
|
|
long double _TLIBC_CDECL_ logbl(long double);
|
|
long double _TLIBC_CDECL_ modfl(long double, long double *);
|
|
long double _TLIBC_CDECL_ scalbnl(long double, int);
|
|
long double _TLIBC_CDECL_ scalblnl(long double, long int);
|
|
|
|
long double _TLIBC_CDECL_ cbrtl(long double);
|
|
long double _TLIBC_CDECL_ fabsl(long double);
|
|
long double _TLIBC_CDECL_ hypotl(long double, long double);
|
|
long double _TLIBC_CDECL_ powl(long double, long double);
|
|
long double _TLIBC_CDECL_ sqrtl(long double);
|
|
|
|
long double _TLIBC_CDECL_ erfl(long double);
|
|
long double _TLIBC_CDECL_ erfcl(long double);
|
|
long double _TLIBC_CDECL_ lgammal(long double);
|
|
long double _TLIBC_CDECL_ tgammal(long double);
|
|
|
|
long double _TLIBC_CDECL_ ceill(long double);
|
|
long double _TLIBC_CDECL_ floorl(long double);
|
|
long double _TLIBC_CDECL_ nearbyintl(long double);
|
|
long double _TLIBC_CDECL_ rintl(long double);
|
|
long int _TLIBC_CDECL_ lrintl(long double);
|
|
long long int _TLIBC_CDECL_ llrintl(long double);
|
|
long double _TLIBC_CDECL_ roundl(long double);
|
|
long int _TLIBC_CDECL_ lroundl(long double);
|
|
long long int _TLIBC_CDECL_ llroundl(long double);
|
|
long double _TLIBC_CDECL_ truncl(long double);
|
|
|
|
long double _TLIBC_CDECL_ fmodl(long double, long double);
|
|
long double _TLIBC_CDECL_ remainderl(long double, long double);
|
|
long double _TLIBC_CDECL_ remquol(long double, long double, int *);
|
|
|
|
long double _TLIBC_CDECL_ copysignl(long double, long double);
|
|
long double _TLIBC_CDECL_ nanl(const char *);
|
|
long double _TLIBC_CDECL_ nextafterl(long double, long double);
|
|
|
|
long double _TLIBC_CDECL_ fdiml(long double, long double);
|
|
long double _TLIBC_CDECL_ fmaxl(long double, long double);
|
|
long double _TLIBC_CDECL_ fminl(long double, long double);
|
|
long double _TLIBC_CDECL_ fmal(long double, long double, long double);
|
|
|
|
/* nexttoward():
|
|
* The implementation in Intel math library is incompatible with MSVC.
|
|
* Because sizeof(long double) is 8bytes with MSVC,
|
|
* but the expected long double size is 10bytes.
|
|
* And by default, MSVC doesn't provide nexttoward().
|
|
* So we only provide Linux version here.
|
|
*/
|
|
double _TLIBC_CDECL_ nexttoward(double, long double);
|
|
float _TLIBC_CDECL_ nexttowardf(float, long double);
|
|
|
|
long double _TLIBC_CDECL_ nexttowardl(long double, long double);
|
|
|
|
/*
|
|
* Library implementation
|
|
*/
|
|
int _TLIBC_CDECL_ __fpclassify(double);
|
|
int _TLIBC_CDECL_ __fpclassifyf(float);
|
|
int _TLIBC_CDECL_ __isfinite(double);
|
|
int _TLIBC_CDECL_ __isfinitef(float);
|
|
int _TLIBC_CDECL_ __isinf(double);
|
|
int _TLIBC_CDECL_ __isinff(float);
|
|
int _TLIBC_CDECL_ __isnan(double);
|
|
int _TLIBC_CDECL_ __isnanf(float);
|
|
int _TLIBC_CDECL_ __isnormal(double);
|
|
int _TLIBC_CDECL_ __isnormalf(float);
|
|
int _TLIBC_CDECL_ __signbit(double);
|
|
int _TLIBC_CDECL_ __signbitf(float);
|
|
|
|
int _TLIBC_CDECL_ __fpclassifyl(long double);
|
|
int _TLIBC_CDECL_ __isfinitel(long double);
|
|
int _TLIBC_CDECL_ __isinfl(long double);
|
|
int _TLIBC_CDECL_ __isnanl(long double);
|
|
int _TLIBC_CDECL_ __isnormall(long double);
|
|
int _TLIBC_CDECL_ __signbitl(long double);
|
|
|
|
/*
|
|
* Non-C99 functions.
|
|
*/
|
|
double _TLIBC_CDECL_ drem(double, double);
|
|
double _TLIBC_CDECL_ exp10(double);
|
|
double _TLIBC_CDECL_ gamma(double);
|
|
double _TLIBC_CDECL_ gamma_r(double, int *);
|
|
double _TLIBC_CDECL_ j0(double);
|
|
double _TLIBC_CDECL_ j1(double);
|
|
double _TLIBC_CDECL_ jn(int, double);
|
|
double _TLIBC_CDECL_ lgamma_r(double, int *);
|
|
double _TLIBC_CDECL_ pow10(double);
|
|
double _TLIBC_CDECL_ scalb(double, double);
|
|
/* C99 Macro signbit.*/
|
|
double _TLIBC_CDECL_ significand(double);
|
|
void _TLIBC_CDECL_ sincos(double, double *, double *);
|
|
double _TLIBC_CDECL_ y0(double);
|
|
double _TLIBC_CDECL_ y1(double);
|
|
double _TLIBC_CDECL_ yn(int, double);
|
|
/* C99 Macro isinf.*/
|
|
/* C99 Macro isnan.*/
|
|
int _TLIBC_CDECL_ finite(double);
|
|
|
|
float _TLIBC_CDECL_ dremf(float, float);
|
|
float _TLIBC_CDECL_ exp10f(float);
|
|
float _TLIBC_CDECL_ gammaf(float);
|
|
float _TLIBC_CDECL_ gammaf_r(float, int *);
|
|
float _TLIBC_CDECL_ j0f(float);
|
|
float _TLIBC_CDECL_ j1f(float);
|
|
float _TLIBC_CDECL_ jnf(int, float);
|
|
float _TLIBC_CDECL_ lgammaf_r(float, int *);
|
|
float _TLIBC_CDECL_ pow10f(float);
|
|
float _TLIBC_CDECL_ scalbf(float, float);
|
|
int _TLIBC_CDECL_ signbitf(float);
|
|
float _TLIBC_CDECL_ significandf(float);
|
|
void _TLIBC_CDECL_ sincosf(float, float *, float *);
|
|
float _TLIBC_CDECL_ y0f(float);
|
|
float _TLIBC_CDECL_ y1f(float);
|
|
float _TLIBC_CDECL_ ynf(int, float);
|
|
int _TLIBC_CDECL_ finitef(float);
|
|
int _TLIBC_CDECL_ isinff(float);
|
|
int _TLIBC_CDECL_ isnanf(float);
|
|
|
|
long double _TLIBC_CDECL_ dreml(long double, long double);
|
|
long double _TLIBC_CDECL_ exp10l(long double);
|
|
long double _TLIBC_CDECL_ gammal(long double);
|
|
long double _TLIBC_CDECL_ gammal_r(long double, int *);
|
|
long double _TLIBC_CDECL_ j0l(long double);
|
|
long double _TLIBC_CDECL_ j1l(long double);
|
|
long double _TLIBC_CDECL_ jnl(int, long double);
|
|
long double _TLIBC_CDECL_ lgammal_r(long double, int *);
|
|
long double _TLIBC_CDECL_ pow10l(long double);
|
|
long double _TLIBC_CDECL_ scalbl(long double, long double);
|
|
int _TLIBC_CDECL_ signbitl(long double);
|
|
long double _TLIBC_CDECL_ significandl(long double);
|
|
void _TLIBC_CDECL_ sincosl(long double, long double *, long double *);
|
|
long double _TLIBC_CDECL_ y1l(long double);
|
|
long double _TLIBC_CDECL_ y0l(long double);
|
|
long double _TLIBC_CDECL_ ynl(int, long double);
|
|
int _TLIBC_CDECL_ finitel(long double);
|
|
int _TLIBC_CDECL_ isinfl(long double);
|
|
int _TLIBC_CDECL_ isnanl(long double);
|
|
|
|
/*
|
|
* TODO: From Intel Decimal Floating-Point Math Library
|
|
* signbitd32/signbitd64/signbitd128, finited32/finited64/finited128
|
|
* isinfd32/isinfd64/isinfd128, isnand32/isnand64/isnand128
|
|
*/
|
|
#if defined(__cplusplus)
|
|
/* Clang does not support decimal floating point types.
|
|
*
|
|
* c.f.:
|
|
* http://clang.llvm.org/docs/UsersManual.html#gcc-extensions-not-implemented-yet
|
|
*/
|
|
#if !defined(__clang__)
|
|
typedef float _Decimal32 __attribute__((mode(SD)));
|
|
typedef float _Decimal64 __attribute__((mode(DD)));
|
|
typedef float _Decimal128 __attribute__((mode(TD)));
|
|
#endif
|
|
#endif
|
|
|
|
__END_DECLS
|
|
|
|
#endif /* !_MATH_H_ */
|