~ubuntu-branches/debian/jessie/eso-midas/jessie

« back to all changes in this revision

Viewing changes to stdred/feros/incl/u_const.h

  • Committer: Package Import Robot
  • Author(s): Ole Streicher
  • Date: 2014-04-22 14:44:58 UTC
  • Revision ID: package-import@ubuntu.com-20140422144458-okiwi1assxkkiz39
Tags: upstream-13.09pl1.2+dfsg
ImportĀ upstreamĀ versionĀ 13.09pl1.2+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* @(#)u_const.h        19.1 (ESO-IPG) 02/25/03 14:21:12 */
 
2
/*.pn 407 */
 
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.                     */
 
7
 
 
8
 
 
9
/*-----------------------  FILE u_const.h  ---------------------------*/
 
10
 
 
11
#define IEEE
 
12
 
 
13
/* IEEE - Norm fuer die Darstellung von Gleitkommazahlen:
 
14
 
 
15
      8 Byte lange Gleitkommazahlen, mit
 
16
 
 
17
     53 Bit Mantisse  ==> Mantissenbereich:    2 hoch 52 versch. Zahlen
 
18
                                               mit 0.1 <= Zahl < 1.0,
 
19
                                               1 Vorzeichen-Bit
 
20
     11 Bit Exponent  ==> Exponentenbereich:  -1024...+1023
 
21
 
 
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.
 
26
   */
 
27
 
 
28
#ifdef IEEE         /*----------- Falls IEEE Norm --------------------*/
 
29
 
 
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                   */
 
34
 
 
35
#define EPSQUAD   4.930380657631324e-032
 
36
#define EPSROOT   1.490116119384766e-008
 
37
 
 
38
#define POSMAX    8.98846567431158e+307    /* groesste positive Zahl  */
 
39
#define POSMIN    5.56268464626800e-309    /* kleinste positive Zahl  */
 
40
#define MAXROOT   9.48075190810918e+153
 
41
 
 
42
#define BASIS     2                        /* Basis der Zahlendarst.  */
 
43
#define PI        3.141592653589793e+000
 
44
#define EXP_1     2.718281828459045e+000
 
45
 
 
46
#else               /*------------------ sonst -----------------------*/
 
47
 
 
48
double exp  ();
 
49
double atan ();
 
50
double pow  ();
 
51
double sqrt ();
 
52
 
 
53
double masch()            /* MACH_EPS maschinenunabhaengig bestimmen  */
 
54
{
 
55
  double eps = 1.0, x = 2.0, y = 1.0;
 
56
  while ( y < x )
 
57
    { eps *= 0.5;
 
58
      x = 1.0 + eps;
 
59
    }
 
60
  eps *= 2.0; return (eps);
 
61
}
 
62
 
 
63
int basis()               /* BASIS maschinenunabhaengig bestimmen     */
 
64
{
 
65
  double x = 1.0, one = 1.0, b = 1.0;
 
66
 
 
67
  while ( (x + one) - x == one ) x *= 2.0;
 
68
  while ( (x + b) == x ) b *= 2.0;
 
69
 
 
70
  return ( (int) ((x + b) - x) );
 
71
}
 
72
 
 
73
#define BASIS     basis()                  /* Basis der Zahlendarst.  */
 
74
 
 
75
/* Falls die Maschine (der Compiler) keine IEEE-Darstellung fuer
 
76
   Gleitkommazahlen nutzt, muessen die folgenden 2 Konstanten an-
 
77
   gepasst werden.
 
78
   */
 
79
 
 
80
#define MAXEXPON  1023.0                   /* groesster Exponent      */
 
81
#define MINEXPON -1024.0                   /* kleinster Exponent      */
 
82
 
 
83
/* nach einmaliger Bestimmung sollten die folgenden #define's
 
84
   durch Konstanten ersetzt werden
 
85
   */
 
86
 
 
87
#define MACH_EPS  masch()
 
88
#define EPSQUAD   MACH_EPS * MACH_EPS
 
89
#define EPSROOT   sqrt(MACH_EPS)
 
90
 
 
91
#define POSMAX    pow ((double) BASIS, MAXEXPON)
 
92
#define POSMIN    pow ((double) BASIS, MINEXPON)
 
93
#define MAXROOT   sqrt(POSMAX)
 
94
 
 
95
#define PI        4.0 * atan (1.0)
 
96
#define EXP_1     exp(1.0)
 
97
 
 
98
#endif              /*-------------- ENDE ifdef ----------------------*/
 
99
 
 
100
 
 
101
#define NEGMAX   -POSMIN                   /* groesste negative Zahl  */
 
102
#define NEGMIN   -POSMAX                   /* kleinste negative Zahl  */
 
103
 
 
104
#define TRUE      1
 
105
#define FALSE     0
 
106
 
 
107
 
 
108
/* Definition von Funktionsmakros:
 
109
   */
 
110
 
 
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  */
 
115
                                               /* Y mal abs(X)        */
 
116
#define sqr(X) ((X) * (X))                     /* Quadrat von X       */
 
117