|
|
1.1 root 1: /*
2: * C general utilities library internals.
3: * _pow10()
4: * Compute 10.0^n.
5: */
6:
7: /*
8: * There are lots of ways to do this, with varying accuracy and speed.
9: * Using recursion on all negative exponents eliminates the divide
10: * but introduces greater roundoff errors.
11: */
12:
13: static double powtab[] = {
14: 1e-16, 1e-15, 1e-14, 1e-13, 1e-12, 1e-11, 1e-10, 1e-9,
15: 1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1,
16: 1e0,
17: 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8,
18: 1e9, 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16
19: };
20:
21: double
22: _pow10(exp) register int exp;
23: {
24:
25: if (exp < -16)
26: return (1.0/_pow10(-exp));
27: else if (exp <= 16)
28: return (powtab[exp+16]);
29: else if (exp <= 64)
30: return (1e16 * _pow10(exp - 16));
31: else
32: return (1e64 * _pow10(exp - 64));
33: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.