#ifndef __HAVE_MATH_CONVEX__ #define __HAVE_MATH_CONVEX__ #define HUGE 8.98846567431157854e+307 /* max double in native mode */ #define HUGE_VAL 8.98846567431157854e+307 #define M_E 2.71828182845904523536 #define M_LN10 2.30258509299404568402 #define M_LN2 0.69314718055994530942 #define M_LOG10E 0.43429448190325182765 #define M_LOG2E 1.44269504088896340736 #define M_PI 3.14159265358979323846 #define M_PI_2 1.57079632679489661923 #define M_PI_4 0.78539816339744830962 #define M_SQRT1_2 0.70710678118654752440 #define M_SQRT2 1.41421356237309504880 #define M_1_PI 0.31830988618379067154 #define M_2_PI 0.63661977236758134308 #define M_2_SQRTPI 1.12837916709551257390 extern __const__ double acos (double); extern __const__ double asin (double); extern __const__ double atan (double); extern __const__ double atan2 (double, double); extern double atof (__const__ char *); extern __const__ double cabs (); extern __const__ double ceil (double); extern __const__ double cos (double); extern __const__ double cosh (double); extern __const__ double dcvtid (double); extern __const__ double exp (double); extern __const__ double fabs (double); extern __const__ double floor (double); extern double frexp (double, int *); extern __const__ double gamma (double); extern __const__ double hypot (double, double); extern __const__ double idcvtd (double); extern __const__ double ircvtr (double); extern __const__ double j0 (double); extern __const__ double j1 (double); extern __const__ double jn (int, double); extern __const__ double ldexp (double, int); extern __const__ double log (double); extern __const__ double log10 (double); extern __const__ double fmod (double, double); extern double modf (double, double *); extern __const__ double pow (double, double); extern __const__ double rcvtir (double); extern __const__ double sacos (double); extern __const__ double sasin (double); extern __const__ double satan (double); extern __const__ double satan2 (double); extern __const__ double scabs (); extern __const__ double scos (double); extern __const__ double scosh (double); extern __const__ double sexp (double); extern __const__ double sfabs (double); extern __const__ double shypot (double, double); extern __const__ double sin (double); extern __const__ double sinh (double); extern __const__ double slog (double); extern __const__ double slog10 (double); extern __const__ double spow (double); extern __const__ double sqrt (double); extern __const__ double ssin (double); extern __const__ double ssinh (double); extern __const__ double ssqrt (double); extern __const__ double stan (double); extern __const__ double stanh (double); extern __const__ double tan (double); extern __const__ double tanh (double); extern __const__ double y0 (double); extern __const__ double y1 (double); extern __const__ double yn (int, double); extern __const__ long int ipow (int, int); extern __const__ long long int lpow (long long int, long long int); #define fabs(x) __builtin_fabs(x) #ifdef __convex__ #define frexp(x,y) __inline_frexp(x,y) #define ldexp(x,y) __inline_ldexp(x,y) #ifdef __convex_c2__ #define ceil(x) __inline_ceil (x) #define cos(x) __inline_cos (x) #define exp(x) __inline_exp (x) #define floor(x) __inline_floor (x) #define log(x) __inline_log (x) #define log10(x) __inline_log10 (x) #define modf(x,y) __inline_modf ((x), (y)) #define sin(x) __inline_sin (x) #define sqrt(x) __inline_sqrt (x) #endif __convex_c2__ __inline__ static __const__ double __inline_ceil (double x) { double z; __asm__ ("frint.d %1,%0" : "=d" (z) : "d" (x)); if (z < x) z += 1.0; return z; } __inline__ static __const__ double __inline_cos (double x) { double z; __asm__ ("cos.d %0" : "=d" (z) : "0" (x)); return z; } __inline__ static __const__ double __inline_exp (double x) { double z; __asm__ ("exp.d %0" : "=d" (z) : "0" (x)); return z; } __inline__ static __const__ double __inline_floor (double x) { double z; __asm__ ("frint.d %1,%0" : "=d" (z) : "d" (x)); if (z > x) z -= 1.0; return z; } __inline__ static __const__ double __inline_frexp (double x, int *np) { union u {double d; unsigned long long ll;} u; if ((u.d = x) == 0) *np = 0; else { *np = ((u.ll >> 52) & 03777) - 02000; u.ll = (u.ll & 0x800fffffffffffffLL) | ((union u) {0.5}).ll; } return u.d; } __inline__ static __const__ double __inline_ldexp (double x, int n) { extern int errno; union {double d; long long ll; unsigned sexp : 12;} u; if ((u.d = x) != 0) { int exp = n + (u.sexp & 03777); if (exp <= 0) u.ll = 0, errno = 34; else if (exp > 03777) u.ll |= 0x7fffffffffffffffLL, errno = 34; else u.ll += (long long) n << 52; } return u.d; } __inline__ static __const__ double __inline_log (double x) { double z; __asm__ ("ln.d %0" : "=d" (z) : "0" (x)); return z; } __inline__ static __const__ double __inline_log10 (double x) { return M_LOG10E * __inline_log (x); } __inline__ static __const__ double __inline_modf (double x, double *np) { double intpart; __asm__ ("frint.d %1,%0" : "=d" (intpart) : "d" (x)); *np = intpart; return x - intpart; } __inline__ static __const__ double __inline_sin (double x) { double z; __asm__ ("sin.d %0" : "=d" (z) : "0" (x)); return z; } __inline__ static __const__ double __inline_sqrt (double x) { double z; __asm__ ("sqrt.d %0" : "=d" (z) : "0" (x)); return z; } #endif __convex__ #endif /* __HAVE_MATH_CONVEX__ */