source: trunk/kitgen/8.x/blt/generic/bltMath.h@ 199

Last change on this file since 199 was 175, checked in by demin, 12 years ago

initial commit

File size: 5.4 KB
RevLine 
[175]1
2/*
3 * bltMath.h --
4 *
5 * Copyright 1993-1998 Lucent Technologies, Inc.
6 *
7 * Permission to use, copy, modify, and distribute this software and
8 * its documentation for any purpose and without fee is hereby
9 * granted, provided that the above copyright notice appear in all
10 * copies and that both that the copyright notice and warranty
11 * disclaimer appear in supporting documentation, and that the names
12 * of Lucent Technologies any of their entities not be used in
13 * advertising or publicity pertaining to distribution of the software
14 * without specific, written prior permission.
15 *
16 * Lucent Technologies disclaims all warranties with regard to this
17 * software, including all implied warranties of merchantability and
18 * fitness. In no event shall Lucent Technologies be liable for any
19 * special, indirect or consequential damages or any damages
20 * whatsoever resulting from loss of use, data or profits, whether in
21 * an action of contract, negligence or other tortuous action, arising
22 * out of or in connection with the use or performance of this
23 * software.
24 */
25
26#ifndef _BLT_MATH_H
27#define _BLT_MATH_H
28
29#include <math.h>
30
31#ifdef HAVE_FLOAT_H
32#include <float.h>
33#endif
34
35#ifdef HAVE_IEEEFP_H
36#include <ieeefp.h>
37#endif /* HAVE_IEEEFP_H */
38
39#ifndef M_PI
40#define M_PI 3.14159265358979323846
41#endif /* M_PI */
42
43#ifndef M_PI_2
44#define M_PI_2 1.57079632679489661923
45#endif
46
47#ifndef M_SQRT2
48#define M_SQRT2 1.41421356237309504880
49#endif /* M_SQRT2 */
50
51#ifndef M_SQRT1_2
52#define M_SQRT1_2 0.70710678118654752440
53#endif /* M_SQRT1_2 */
54
55#ifndef SHRT_MAX
56#define SHRT_MAX 0x7FFF
57#endif /* SHRT_MAX */
58
59#ifndef SHRT_MIN
60#define SHRT_MIN -(SHRT_MAX)
61#endif /* SHRT_MAX */
62
63#ifndef USHRT_MAX
64#define USHRT_MAX 0xFFFF
65#endif /* USHRT_MAX */
66
67#ifndef INT_MAX
68#define INT_MAX 2147483647
69#endif /* INT_MAX */
70
71#ifndef HAVE_FLOAT_H
72/*
73 * ----------------------------------------------------------------------
74 *
75 * DBL_MIN, DBL_MAX --
76 *
77 * DBL_MAX and DBL_MIN are the largest and smaller double
78 * precision numbers that can be represented by the floating
79 * point hardware. If the compiler is ANSI, they can be found in
80 * float.h. Otherwise, we use HUGE_VAL or HUGE to determine
81 * them.
82 *
83 * ----------------------------------------------------------------------
84 */
85/*
86 * Don't want to include __infinity (definition of HUGE_VAL (SC1.x))
87 */
88#ifdef sun
89#define DBL_MAX 1.7976931348623157E+308
90#define DBL_MIN 2.2250738585072014E-308
91#define DBL_EPSILON 2.2204460492503131e-16
92#else
93#ifdef HUGE_VAL
94#define DBL_MAX HUGE_VAL
95#define DBL_MIN (1/HUGE_VAL)
96#else
97#ifdef HUGE
98#define DBL_MAX HUGE
99#define DBL_MIN (1/HUGE)
100#else
101/*
102 * Punt: Assume relatively small values
103 */
104#define DBL_MAX 3.40282347E+38
105#define DBL_MIN 1.17549435E-38
106#endif /*HUGE*/
107#endif /*HUGE_VAL*/
108#endif /*sun*/
109
110#ifndef BLT_DBL_EPSILON
111# define BLT_DBL_EPSILON 2.2204460492503131e-16
112#endif
113#ifndef BLT_FLT_EPSILON
114# define BLT_FLT_EPSILON 1.19209290e-07F
115#endif
116
117#ifndef DBL_EPSILON
118# define DBL_EPSILON BLT_DBL_EPSILON
119#endif
120#ifndef FLT_EPSILON
121# define FLT_EPSILON BLT_FLT_EPSILON
122#endif
123
124#endif /*!HAVE_FLOAT_H*/
125
126/*
127 * ----------------------------------------------------------------------
128 *
129 * The following are macros replacing math library functions:
130 * "fabs", "fmod", "abs", "rint", and "exp10".
131 *
132 * Although many of these routines may exist in your math
133 * library, they aren't used in libtcl.a or libtk.a. This makes
134 * it difficult to dynamically load the BLT library as a shared
135 * object unless the math library is also shared (which isn't
136 * true on several systems). We can avoid the problem by
137 * replacing the "exotic" math routines with macros.
138 *
139 * ----------------------------------------------------------------------
140 */
141#undef ABS
142#define ABS(x) (((x)<0)?(-(x)):(x))
143
144#undef EXP10
145#define EXP10(x) (pow(10.0,(x)))
146
147#undef FABS
148#define FABS(x) (((x)<0.0)?(-(x)):(x))
149
150#undef SIGN
151#define SIGN(x) (((x) < 0.0) ? -1 : 1)
152
153/*
154 * Be careful when using the next two macros. They both assume the floating
155 * point number is less than the size of an int. That means, for example, you
156 * can't use these macros with numbers bigger than than 2^31-1.
157 */
158#undef FMOD
159#define FMOD(x,y) ((x)-(((int)((x)/(y)))*y))
160
161#undef ROUND
162#define ROUND(x) ((int)((x) + (((x)<0.0) ? -0.5 : 0.5)))
163
164#ifdef HAVE_FINITE
165#define FINITE(x) finite(x)
166#else
167#ifdef HAVE_ISFINITE
168#define FINITE(x) isfinite(x)
169#else
170#ifdef HAVE_ISNAN
171#define FINITE(x) (!isnan(x))
172#else
173#define FINITE(x) (TRUE)
174#endif /* HAVE_ISNAN */
175#endif /* HAVE_ISFINITE */
176#endif /* HAVE_FINITE */
177
178extern double bltNaN;
179
180#define DEFINED(x) (!isnan(x))
181#define UNDEFINED(x) (isnan(x))
182#define VALUE_UNDEFINED bltNaN
183
184/*
185 * ----------------------------------------------------------------------
186 *
187 * On some systems "strdup" and "strcasecmp" are in the C library,
188 * but have no declarations in the C header files. Make sure we
189 * supply them here.
190 *
191 * ----------------------------------------------------------------------
192 */
193#ifdef NEED_DECL_STRDUP
194extern char *strdup _ANSI_ARGS_((CONST char *s));
195#endif /* NEED_DECL_STRDUP */
196
197#ifndef HAVE_STRTOLOWER
198extern void strtolower _ANSI_ARGS_((char *s));
199#endif /* HAVE_STRTOLOWER */
200
201#ifdef NEED_DECL_DRAND48
202extern double drand48 _ANSI_ARGS_((void));
203extern void srand48 _ANSI_ARGS_((long seed));
204#endif /* NEED_DECL_DRAND48 */
205
206#ifdef NEED_DECL_STRCASECMP
207extern int strcasecmp _ANSI_ARGS_((CONST char *s1, CONST char *s2));
208#endif /* NEED_DECL_STRCASECMP */
209
210#endif /* BLT_MATH_H */
Note: See TracBrowser for help on using the repository browser.