/* * powga2 - generate a2 table for pow function */ /*)BUILD $(LIBS) = {c:cminit} $(POSTFIX) = {run powga2} */ #include #define NLINES 17 #define MSOCTAL 18 /* ************************************************************************ * * * IT IS ESSENTIAL THAT THE a1[] TABLE BELOW BE EXACTLY THE SAME ONE AS * * APPEARS IN THE POW ROUTINE. THIS PROGRAM ALSO REQUIRES THE FILE * * POWOCT.DAT AS INPUT ON stdin. THE ODD NUMBERED ENTRIES IN THE RESULT * * FILE ON stdout IS TABLE a2[] FOR POW. * * * ************************************************************************ */ double a1[] = { 0.00000000000000000, 0.95760328069857365, 0.91700404320467123, 0.87812608018664974, 0.84089641525371454, 0.80524516597462716, 0.77110541270397041, 0.73841307296974966, 0.70710678118654752, 0.67712777346844637, 0.64841977732550483, 0.62092890603674203, 0.59460355750136054, 0.56939431737834583, 0.54525386633262883, 0.52213689121370692, 0.50000000000000000 }; main() { char line[MAXLIN]; char *gets(); double x, y, z; int i, j; cmathe(0); for (j = 1; j < NLINES; j++) { gets(line); y = 0.0; z = 1.0; for (i = MSOCTAL; i > 0;) { i--; y = 0.125 * y + (double)(line[i] - '0'); z *= 0.125; } y *= 0.125; x = a1[j]; y -= x; for (i = MSOCTAL; line[i] != EOS; i++) { z *= 0.125; y += z * (double)(line[i] - '0'); } printf("%d %25.17e\n", j, y); } }