|
|
1.1 root 1: #ifndef __HAVE_MATH_CONVEX__
2: #define __HAVE_MATH_CONVEX__
3:
4: #define HUGE 8.98846567431157854e+307 /* max double in native mode */
5:
6: #define HUGE_VAL 8.98846567431157854e+307
7:
8: #define M_E 2.71828182845904523536
9: #define M_LN10 2.30258509299404568402
10: #define M_LN2 0.69314718055994530942
11: #define M_LOG10E 0.43429448190325182765
12: #define M_LOG2E 1.44269504088896340736
13: #define M_PI 3.14159265358979323846
14: #define M_PI_2 1.57079632679489661923
15: #define M_PI_4 0.78539816339744830962
16: #define M_SQRT1_2 0.70710678118654752440
17: #define M_SQRT2 1.41421356237309504880
18: #define M_1_PI 0.31830988618379067154
19: #define M_2_PI 0.63661977236758134308
20: #define M_2_SQRTPI 1.12837916709551257390
21:
22: extern __const__ double acos (double);
23: extern __const__ double asin (double);
24: extern __const__ double atan (double);
25: extern __const__ double atan2 (double, double);
26: extern double atof (__const__ char *);
27: extern __const__ double cabs ();
28: extern __const__ double ceil (double);
29: extern __const__ double cos (double);
30: extern __const__ double cosh (double);
31: extern __const__ double dcvtid (double);
32: extern __const__ double exp (double);
33: extern __const__ double fabs (double);
34: extern __const__ double floor (double);
35: extern double frexp (double, int *);
36: extern __const__ double gamma (double);
37: extern __const__ double hypot (double, double);
38: extern __const__ double idcvtd (double);
39: extern __const__ double ircvtr (double);
40: extern __const__ double j0 (double);
41: extern __const__ double j1 (double);
42: extern __const__ double jn (int, double);
43: extern __const__ double ldexp (double, int);
44: extern __const__ double log (double);
45: extern __const__ double log10 (double);
46: extern __const__ double fmod (double, double);
47: extern double modf (double, double *);
48: extern __const__ double pow (double, double);
49: extern __const__ double rcvtir (double);
50: extern __const__ double sacos (double);
51: extern __const__ double sasin (double);
52: extern __const__ double satan (double);
53: extern __const__ double satan2 (double);
54: extern __const__ double scabs ();
55: extern __const__ double scos (double);
56: extern __const__ double scosh (double);
57: extern __const__ double sexp (double);
58: extern __const__ double sfabs (double);
59: extern __const__ double shypot (double, double);
60: extern __const__ double sin (double);
61: extern __const__ double sinh (double);
62: extern __const__ double slog (double);
63: extern __const__ double slog10 (double);
64: extern __const__ double spow (double);
65: extern __const__ double sqrt (double);
66: extern __const__ double ssin (double);
67: extern __const__ double ssinh (double);
68: extern __const__ double ssqrt (double);
69: extern __const__ double stan (double);
70: extern __const__ double stanh (double);
71: extern __const__ double tan (double);
72: extern __const__ double tanh (double);
73: extern __const__ double y0 (double);
74: extern __const__ double y1 (double);
75: extern __const__ double yn (int, double);
76: extern __const__ long int ipow (int, int);
77: extern __const__ long long int lpow (long long int, long long int);
78:
79: #define fabs(x) __builtin_fabs(x)
80:
81: #ifdef __convex__
82:
83: #define frexp(x,y) __inline_frexp(x,y)
84: #define ldexp(x,y) __inline_ldexp(x,y)
85:
86: #ifdef __convex_c2__
87:
88: #define ceil(x) __inline_ceil (x)
89: #define cos(x) __inline_cos (x)
90: #define exp(x) __inline_exp (x)
91: #define floor(x) __inline_floor (x)
92: #define log(x) __inline_log (x)
93: #define log10(x) __inline_log10 (x)
94: #define modf(x,y) __inline_modf ((x), (y))
95: #define sin(x) __inline_sin (x)
96: #define sqrt(x) __inline_sqrt (x)
97:
98: #endif __convex_c2__
99:
100: __inline__ static __const__ double __inline_ceil (double x)
101: {
102: double z;
103: __asm__ ("frint.d %1,%0" : "=d" (z) : "d" (x));
104: if (z < x) z += 1.0;
105: return z;
106: }
107:
108: __inline__ static __const__ double __inline_cos (double x)
109: {
110: double z;
111: __asm__ ("cos.d %0" : "=d" (z) : "0" (x));
112: return z;
113: }
114:
115: __inline__ static __const__ double __inline_exp (double x)
116: {
117: double z;
118: __asm__ ("exp.d %0" : "=d" (z) : "0" (x));
119: return z;
120: }
121:
122: __inline__ static __const__ double __inline_floor (double x)
123: {
124: double z;
125: __asm__ ("frint.d %1,%0" : "=d" (z) : "d" (x));
126: if (z > x) z -= 1.0;
127: return z;
128: }
129:
130: __inline__ static __const__ double __inline_frexp (double x, int *np)
131: {
132: union u {double d; unsigned long long ll;} u;
133: if ((u.d = x) == 0)
134: *np = 0;
135: else
136: {
137: *np = ((u.ll >> 52) & 03777) - 02000;
138: u.ll = (u.ll & 0x800fffffffffffffLL) | ((union u) {0.5}).ll;
139: }
140: return u.d;
141: }
142:
143: __inline__ static __const__ double __inline_ldexp (double x, int n)
144: {
145: extern int errno;
146: union {double d; long long ll; unsigned sexp : 12;} u;
147: if ((u.d = x) != 0)
148: {
149: int exp = n + (u.sexp & 03777);
150: if (exp <= 0)
151: u.ll = 0, errno = 34;
152: else if (exp > 03777)
153: u.ll |= 0x7fffffffffffffffLL, errno = 34;
154: else
155: u.ll += (long long) n << 52;
156: }
157: return u.d;
158: }
159:
160: __inline__ static __const__ double __inline_log (double x)
161: {
162: double z;
163: __asm__ ("ln.d %0" : "=d" (z) : "0" (x));
164: return z;
165: }
166:
167: __inline__ static __const__ double __inline_log10 (double x)
168: {
169: return M_LOG10E * __inline_log (x);
170: }
171:
172: __inline__ static __const__ double __inline_modf (double x, double *np)
173: {
174: double intpart;
175: __asm__ ("frint.d %1,%0" : "=d" (intpart) : "d" (x));
176: *np = intpart;
177: return x - intpart;
178: }
179:
180: __inline__ static __const__ double __inline_sin (double x)
181: {
182: double z;
183: __asm__ ("sin.d %0" : "=d" (z) : "0" (x));
184: return z;
185: }
186:
187: __inline__ static __const__ double __inline_sqrt (double x)
188: {
189: double z;
190: __asm__ ("sqrt.d %0" : "=d" (z) : "0" (x));
191: return z;
192: }
193:
194: #endif __convex__
195:
196: #endif /* __HAVE_MATH_CONVEX__ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.