Update build system to Autoconf 2.58, Automake 1.7, gettext 0.12.1.
[pspp-builds.git] / lib / dcdflib / ipmpar.c
1 #include <config.h>
2
3 #include "limits.h"
4
5 /* Edited 12/22/97 by Ben Pfaff for PSPP. */
6
7 int ipmpar(int*);
8 /*
9 -----------------------------------------------------------------------
10  
11      IPMPAR PROVIDES THE INTEGER MACHINE CONSTANTS FOR THE COMPUTER
12      THAT IS USED. IT IS ASSUMED THAT THE ARGUMENT I IS AN INTEGER
13      HAVING ONE OF THE VALUES 1-10. IPMPAR(I) HAS THE VALUE ...
14  
15   INTEGERS.
16  
17      ASSUME INTEGERS ARE REPRESENTED IN THE N-DIGIT, BASE-A FORM
18  
19                SIGN ( X(N-1)*A**(N-1) + ... + X(1)*A + X(0) )
20  
21                WHERE 0 .LE. X(I) .LT. A FOR I=0,...,N-1.
22  
23      IPMPAR(1) = A, THE BASE.
24  
25      IPMPAR(2) = N, THE NUMBER OF BASE-A DIGITS.
26  
27      IPMPAR(3) = A**N - 1, THE LARGEST MAGNITUDE.
28  
29   FLOATING-POINT NUMBERS.
30  
31      IT IS ASSUMED THAT THE SINGLE AND DOUBLE PRECISION FLOATING
32      POINT ARITHMETICS HAVE THE SAME BASE, SAY B, AND THAT THE
33      NONZERO NUMBERS ARE REPRESENTED IN THE FORM
34  
35                SIGN (B**E) * (X(1)/B + ... + X(M)/B**M)
36  
37                WHERE X(I) = 0,1,...,B-1 FOR I=1,...,M,
38                X(1) .GE. 1, AND EMIN .LE. E .LE. EMAX.
39  
40      IPMPAR(4) = B, THE BASE.
41  
42   SINGLE-PRECISION
43  
44      IPMPAR(5) = M, THE NUMBER OF BASE-B DIGITS.
45  
46      IPMPAR(6) = EMIN, THE SMALLEST EXPONENT E.
47  
48      IPMPAR(7) = EMAX, THE LARGEST EXPONENT E.
49  
50   DOUBLE-PRECISION
51  
52      IPMPAR(8) = M, THE NUMBER OF BASE-B DIGITS.
53  
54      IPMPAR(9) = EMIN, THE SMALLEST EXPONENT E.
55  
56      IPMPAR(10) = EMAX, THE LARGEST EXPONENT E.
57  
58 -----------------------------------------------------------------------
59  
60      TO DEFINE THIS FUNCTION FOR THE COMPUTER BEING USED REMOVE
61      THE COMMENT DELIMITORS FROM THE DEFINITIONS DIRECTLY BELOW THE NAME
62      OF THE MACHINE
63  
64 -----------------------------------------------------------------------
65  
66      IPMPAR IS AN ADAPTATION OF THE FUNCTION I1MACH, WRITTEN BY
67      P.A. FOX, A.D. HALL, AND N.L. SCHRYER (BELL LABORATORIES).
68      IPMPAR WAS FORMED BY A.H. MORRIS (NSWC). THE CONSTANTS ARE
69      FROM BELL LABORATORIES, NSWC, AND OTHER SOURCES.
70  
71 -----------------------------------------------------------------------
72      .. Scalar Arguments ..
73 */
74 int ipmpar(int *i)
75 {
76   static int imach[11];
77   static int ipmpar;
78   
79   imach[1] = 2;
80   imach[2] = sizeof (long) * 8 - 1;
81   imach[3] = INT_MAX;
82
83 #if FPREP_IEEE754
84   imach[4] = 2;
85   imach[5] = 24;
86   imach[6] = -125;
87   imach[7] = 128;
88   imach[8] = 53;
89   imach[9] = -1021;
90   imach[10] = 1024;
91 #else
92 #error Please define machine-specific constants for your machine.
93 #endif
94    
95   ipmpar = imach[*i];
96   return ipmpar;
97 }