1
/* @(#)u_const.h 19.1 (ESO-IPG) 02/25/03 14:21:12 */
3
/*.hlAnhang: C - Programme*/
4
/*.hrKonstanten- und Macro-Definitionen*/
5
/*.fe Die Include-Datei u_const.h ist in das Verzeichnis zu stellen, */
6
/*.fe wo der Compiler nach Include-Dateien sucht. */
9
/*----------------------- FILE u_const.h ---------------------------*/
13
/* IEEE - Norm fuer die Darstellung von Gleitkommazahlen:
15
8 Byte lange Gleitkommazahlen, mit
17
53 Bit Mantisse ==> Mantissenbereich: 2 hoch 52 versch. Zahlen
18
mit 0.1 <= Zahl < 1.0,
20
11 Bit Exponent ==> Exponentenbereich: -1024...+1023
22
Die 1. Zeile ( #define IEEE ) ist zu loeschen, falls die Maschine
23
bzw. der Compiler keine Gleitpunktzahlen gemaess der IEEE-Norm
24
benutzt. Zusaetzlich muessen die Zahlen MAXEXPON, MINEXPON
25
(s.u.) angepasst werden.
28
#ifdef IEEE /*----------- Falls IEEE Norm --------------------*/
30
#define MACH_EPS 2.220446049250313e-016 /* Maschinengenauigkeit */
31
/* IBM-AT: = 2 hoch -52 */
32
/* MACH_EPS ist die kleinste positive, auf der Maschine darstellbare
33
Zahl x, die der Bedingung genuegt: 1.0 + x > 1.0 */
35
#define EPSQUAD 4.930380657631324e-032
36
#define EPSROOT 1.490116119384766e-008
38
#define POSMAX 8.98846567431158e+307 /* groesste positive Zahl */
39
#define POSMIN 5.56268464626800e-309 /* kleinste positive Zahl */
40
#define MAXROOT 9.48075190810918e+153
42
#define BASIS 2 /* Basis der Zahlendarst. */
43
#define PI 3.141592653589793e+000
44
#define EXP_1 2.718281828459045e+000
46
#else /*------------------ sonst -----------------------*/
53
double masch() /* MACH_EPS maschinenunabhaengig bestimmen */
55
double eps = 1.0, x = 2.0, y = 1.0;
60
eps *= 2.0; return (eps);
63
int basis() /* BASIS maschinenunabhaengig bestimmen */
65
double x = 1.0, one = 1.0, b = 1.0;
67
while ( (x + one) - x == one ) x *= 2.0;
68
while ( (x + b) == x ) b *= 2.0;
70
return ( (int) ((x + b) - x) );
73
#define BASIS basis() /* Basis der Zahlendarst. */
75
/* Falls die Maschine (der Compiler) keine IEEE-Darstellung fuer
76
Gleitkommazahlen nutzt, muessen die folgenden 2 Konstanten an-
80
#define MAXEXPON 1023.0 /* groesster Exponent */
81
#define MINEXPON -1024.0 /* kleinster Exponent */
83
/* nach einmaliger Bestimmung sollten die folgenden #define's
84
durch Konstanten ersetzt werden
87
#define MACH_EPS masch()
88
#define EPSQUAD MACH_EPS * MACH_EPS
89
#define EPSROOT sqrt(MACH_EPS)
91
#define POSMAX pow ((double) BASIS, MAXEXPON)
92
#define POSMIN pow ((double) BASIS, MINEXPON)
93
#define MAXROOT sqrt(POSMAX)
95
#define PI 4.0 * atan (1.0)
96
#define EXP_1 exp(1.0)
98
#endif /*-------------- ENDE ifdef ----------------------*/
101
#define NEGMAX -POSMIN /* groesste negative Zahl */
102
#define NEGMIN -POSMAX /* kleinste negative Zahl */
108
/* Definition von Funktionsmakros:
111
#define min(X, Y) (((X) < (Y)) ? (X) : (Y)) /* Minimum von X,Y */
112
#define max(X, Y) (((X) > (Y)) ? (X) : (Y)) /* Maximum von X,Y */
113
#define abs(X) (((X) >= 0) ? (X) : -(X)) /* Absolutbetrag von X */
114
#define sign(X, Y) (((Y) < 0) ? -abs(X) : abs(X)) /* Vorzeichen von */
116
#define sqr(X) ((X) * (X)) /* Quadrat von X */