|
|
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.