On Wed, 1 Mar 2023 05:28:34 GMT, Joe Darcy <da...@openjdk.org> wrote:
> Last and certainly not least in the port of FDLIBM to Java, the > transcendental methods for sin, cos, and tan. > > Some more tests are to be written in the StrictMath directory to verify that > the StrictMath algorihtm for sin/cos/tan is being used rather than a > different one. However, I wanted to get the rest of the change out for review > first. > > The sin/cos/tan methods are grouped together since they share the same > argument reduction logic. Argument reduction is the process of mapping an > argument of a function to an argument in a restricted range (and possibly > returning some function of the reduced argument). For sin, cos, and tan, > since they are fundamentally periodic with respect to a multiple of pi, > argument reduction is done to find the remainder of the original argument > with respect to pi/2. src/java.base/share/classes/java/lang/FdLibm.java line 166: > 164: } else { // argument reduction needed > 165: n = RemPio2.__ieee754_rem_pio2(x, y); > 166: switch(n & 3) { Suggestion: switch (n & 3) { src/java.base/share/classes/java/lang/FdLibm.java line 209: > 207: S4 = 0x1.71de357b1fe7dp-19, // 2.75573137070700676789e-06 > 208: S5 = -0x1.ae5e68a2b9cebp-26, // -2.50507602534068634195e-08 > 209: S6 = 0x1.5d93a5acfd57cp-33; // 1.58969099521155010221e-10 Suggestion: S1 = -0x1.5555555555549p-3, // -1.66666666666666324348e-01 S2 = 0x1.111111110f8a6p-7, // 8.33333333332248946124e-03 S3 = -0x1.a01a019c161d5p-13, // -1.98412698298579493134e-04 S4 = 0x1.71de357b1fe7dp-19, // 2.75573137070700676789e-06 S5 = -0x1.ae5e68a2b9cebp-26, // -2.50507602534068634195e-08 S6 = 0x1.5d93a5acfd57cp-33; // 1.58969099521155010221e-10 src/java.base/share/classes/java/lang/FdLibm.java line 221: > 219: z = x*x; > 220: v = z*x; > 221: r = S2 + z*(S3 + z*(S4 + z*(S5 + z*S6))); Suggestion: z = x*x; v = z*x; r = S2 + z*(S3 + z*(S4 + z*(S5 + z*S6))); src/java.base/share/classes/java/lang/FdLibm.java line 341: > 339: } > 340: z = x*x; > 341: r = z*(C1 + z*(C2 + z*(C3 + z*(C4 + z*(C5 + z*C6))))); Suggestion: z = x*x; r = z*(C1 + z*(C2 + z*(C3 + z*(C4 + z*(C5 + z*C6))))); src/java.base/share/classes/java/lang/FdLibm.java line 444: > 442: private static final double > 443: pio4 = 0x1.921fb54442d18p-1, // 7.85398163397448278999e-01 > 444: pio4lo= 0x1.1a62633145c07p-55, // 3.06161699786838301793e-17 Suggestion: pio4 = 0x1.921fb54442d18p-1, // 7.85398163397448278999e-01 pio4lo = 0x1.1a62633145c07p-55, // 3.06161699786838301793e-17 src/java.base/share/classes/java/lang/FdLibm.java line 445: > 443: pio4 = 0x1.921fb54442d18p-1, // 7.85398163397448278999e-01 > 444: pio4lo= 0x1.1a62633145c07p-55, // 3.06161699786838301793e-17 > 445: T[] = { Suggestion: T[] = { src/java.base/share/classes/java/lang/FdLibm.java line 498: > 496: } > 497: z = x*x; > 498: w = z*z; Suggestion: z = x*x; w = z*z; src/java.base/share/classes/java/lang/FdLibm.java line 579: > 577: pio2_2t = 0x1.3198a2e037073p-69, // > 2.02226624879595063154e-21 > 578: pio2_3 = 0x1.3198a2ep-69, // > 2.02226624871116645580e-21 > 579: pio2_3t = 0x1.b839a252049c1p-104; // > 8.47842766036889956997e-32 Suggestion: invpio2 = 0x1.45f306dc9c883p-1, // 6.36619772367581382433e-01 pio2_1 = 0x1.921fb544p0, // 1.57079632673412561417e+00 pio2_1t = 0x1.0b4611a626331p-34, // 6.07710050650619224932e-11 pio2_2 = 0x1.0b4611a6p-34, // 6.07710050630396597660e-11 pio2_2t = 0x1.3198a2e037073p-69, // 2.02226624879595063154e-21 pio2_3 = 0x1.3198a2ep-69, // 2.02226624871116645580e-21 pio2_3t = 0x1.b839a252049c1p-104; // 8.47842766036889956997e-32 src/java.base/share/classes/java/lang/FdLibm.java line 627: > 625: y[0] = r - w; // quick check no cancellation > 626: } else { > 627: j = ix >> 20; Suggestion: j = ix >> 20; src/java.base/share/classes/java/lang/FdLibm.java line 634: > 632: w = fn*pio2_2; > 633: r = t - w; > 634: w = fn*pio2_2t - ((t - r) - w); Suggestion: t = r; w = fn*pio2_2; r = t - w; w = fn*pio2_2t - ((t - r) - w); src/java.base/share/classes/java/lang/FdLibm.java line 675: > 673: nx--; > 674: } > 675: n = KernelRemPio2.__kernel_rem_pio2(tx, y, e0, nx, 2, > two_over_pi); Suggestion: n = KernelRemPio2.__kernel_rem_pio2(tx, y, e0, nx, 2, two_over_pi); src/java.base/share/classes/java/lang/FdLibm.java line 814: > 812: > 813: static final double > 814: twon24 = 0x1.0p-24; // 5.96046447753906250000e-08 Suggestion: twon24 = 0x1.0p-24; // 5.96046447753906250000e-08 src/java.base/share/classes/java/lang/FdLibm.java line 829: > 827: > 828: // determine jx, jv, q0, note that 3 > q0 > 829: jx = nx - 1; Suggestion: jx = nx - 1; src/java.base/share/classes/java/lang/FdLibm.java line 834: > 832: jv = 0; > 833: } > 834: q0 = e0 - 24*(jv + 1); Suggestion: q0 = e0 - 24*(jv + 1); src/java.base/share/classes/java/lang/FdLibm.java line 852: > 850: > 851: jz = jk; > 852: while(true) { Suggestion: while (true) { src/java.base/share/classes/java/lang/FdLibm.java line 877: > 875: } > 876: > 877: if ( ih > 0) { // q > 0.5 Suggestion: if (ih > 0) { // q > 0.5 src/java.base/share/classes/java/lang/FdLibm.java line 882: > 880: for (i=0; i < jz; i++) { // compute 1-q > 881: j = iq[i]; > 882: if(carry == 0) { Suggestion: if (carry == 0) { src/java.base/share/classes/java/lang/FdLibm.java line 892: > 890: } > 891: if (q0 > 0) { // rare case: chance is 1 in > 12 > 892: switch(q0) { Suggestion: switch (q0) { src/java.base/share/classes/java/lang/FdLibm.java line 958: > 956: // convert integer "bit" chunk to floating-point value > 957: fw = Math.scalb(1.0, q0); > 958: for(i = jz; i>=0; i--) { Suggestion: for (i = jz; i>=0; i--) { src/java.base/share/classes/java/lang/FdLibm.java line 964: > 962: > 963: // compute PIo2[0,...,jp]*q[jz,...,0] > 964: for(i = jz; i>=0; i--) { Suggestion: for (i = jz; i>=0; i--) { src/java.base/share/classes/java/lang/FdLibm.java line 972: > 970: > 971: // compress fq[] into y[] > 972: switch(prec) { Suggestion: switch (prec) { src/java.base/share/classes/java/lang/FdLibm.java line 997: > 995: fw = fq[i - 1] + fq[i]; > 996: fq[i] += fq[i - 1] - fw; > 997: fq[i - 1] = fw; Suggestion: fw = fq[i - 1] + fq[i]; fq[i] += fq[i - 1] - fw; fq[i - 1] = fw; ------------- PR: https://git.openjdk.org/jdk/pull/12800