|
|
1.1 root 1: #include <math.h>
2: double ipow();
3:
4: main()
5: {
6: #if mips || sun
7: flt(2, -125, 128, 24, 0x34000000, 0x7f7fffff, 0x00800000);
8: dbl(2, -1021, 1024, 53, 0x3cb00000, 0x00000000, 0x7fefffff, 0xffffffff, 0x00100000, 0x00000000);
9: #endif
10: #ifdef vax
11: flt(2, -127, 127, 24, 0x00003500, 0xffff7fff, 0x00000080);
12: dbl(2, -127, 127, 56, 0x00002500, 0x00000000, 0xffff7fff, 0xffffffff, 0x00000080, 0x00000000);
13: #endif
14: }
15:
16: dbl(b, emin, emax, p, eps, max, min)
17: double eps, max, min;
18: {
19: printf("#define DBL_DIG %g\n", floor((p-1)*log10((double)b)+ispower10(b)));
20: printf("#define DBL_EPSILON %.20e\n", eps);
21: printf("#define DBL_EPSILON %.20e\n", ipow(b, 1-p));
22: printf("#define DBL_MANT_DIG %d\n", p);
23: printf("#define DBL_MAX %.20e\n", (1-ipow(b, -p))*ipow(b, emax-1)*b);
24: printf("#define DBL_MAX %.20e\n", max);
25: printf("#define DBL_MAX_10_EXP %g\n", floor(log10((1-ipow(b, -p))*ipow(b, emax-1)*b)));
26: printf("#define DBL_MAX_EXP %d\n", emax);
27: printf("#define DBL_MIN %.20e\n", ipow(b, emin-1));
28: printf("#define DBL_MIN %.20e\n", min);
29: printf("#define DBL_MIN_10_EXP %g\n", ceil(log10(ipow(b, emin-1))));
30: printf("#define DBL_MIN_EXP %d\n", emin);
31: printf("\n");
32: }
33:
34: flt(b, emin, emax, p, eps, max, min)
35: {
36: printf("#define FLT_DIG %g\n", floor((p-1)*log10((double)b)+ispower10(b)));
37: printf("#define FLT_EPSILON %.20e\n", *(float*)&eps);
38: printf("#define FLT_EPSILON %.20e\n", ipow(b, 1-p));
39: printf("#define FLT_MANT_DIG %d\n", p);
40: printf("#define FLT_MAX %.20e\n", (1-ipow(b, -p))*ipow(b, emax-1)*b);
41: printf("#define FLT_MAX %.20e\n", *(float*)&max);
42: printf("#define FLT_MAX_10_EXP %g\n", floor(log10((1-ipow(b, -p))*ipow(b, emax-1)*b)));
43: printf("#define FLT_MAX_EXP %d\n", emax);
44: printf("#define FLT_MIN %.20e\n", *(float*)&min);
45: printf("#define FLT_MIN %.20e\n", ipow(b, emin-1));
46: printf("#define FLT_MIN_10_EXP %g\n", ceil(log10(ipow(b, emin-1))));
47: printf("#define FLT_MIN_EXP %d\n", emin);
48: printf("\n");
49: }
50:
51: double ipow(x, n)
52: {
53: double ac;
54:
55: if (n >= 0)
56: for (ac = 1; n > 0; n--)
57: ac *= x;
58: else
59: for (ac = 1; n < 0; n++)
60: ac /= x;
61: return ac;
62: }
63:
64: ispower10(x)
65: {
66: double p;
67:
68: for (p = 1; p < x; p *= 10)
69: ;
70: return p == x;
71: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.