new file mode 100644
@@ -0,0 +1,506 @@
+#include <stdio.h>
+#include <math.h>
+
+extern void abort (void);
+#define FABS(x) ((x) >= 0 ? (x) : -(x))
+#define FTYPE long double
+#define FMT "%-39.28La"
+
+/*
+ Tables of numbers for complex division testing
+ All values in hex format
+ z[i] == correctly rounded value of x[i]/y[i];
+ */
+
+#define NUMCNT 100
+
+__complex FTYPE x[NUMCNT] =
+ {
+ 0x1.0p0L + 0x1.0p0Li, /* #1 */
+ 0x1.0p0L + 0x1.0p0Li, /* #2 */
+ 0x1.0p1023L + 0x1.0p-1023Li, /* #3 */
+ 0x1.0p1023L + 0x1.0p1023Li, /* #4 */
+ 0x1.0p1020L + 0x1.0p-844Li, /* #5 */
+ 0x1.0p-71L + 0x1.0p1021Li, /* #6 */
+ 0x1.0p-347L + 0x1.0p-54Li, /* #7 */
+ 0x1.0p-1074L + 0x1.0p-1074Li, /* #8 */
+ 0x1.0p1015L + 0x1.0p-989Li, /* #9 */
+ 0x1.0p-622L + 0x1.0p-1071Li, /* #10 */
+ 0x1.0p0L + 0x3.0p0Li, /* #11 */
+ -0x1.0p0L + 0x3.0p0Li, /* #12 */
+ 0x1.0p0L - 0x3.0p0Li, /* #13 */
+ 0x3.0p0L + 0x1.0p0Li, /* #14 */
+ 0x3.0p0L + 0x4.0p0Li, /* #15 */
+ 0x1.0p0L - 0x3.000000001p-20Li, /* #16 */
+ 0x1.0p0L + 0x3.00000000001p-20Li, /* #17 */
+ 0x1.0p0L + 0x1.8000000000002p1Li, /* #18 */
+ 0x1.0p0L + 0x1.8000000000004p1Li, /* #19 */
+ 0x1.0p0L + 0x1.8000000000008p1Li, /* #20 */
+ 0x1.0p0L + 0x1.8000000000010p1Li, /* #21 */
+ 0x1.0p0L + 0x1.8000000000020p1Li, /* #22 */
+ 0x1.0p0L + 0x1.8000000000040p1Li, /* #23 */
+ 0x1.0p0L + 0x1.8000000000080p1Li, /* #24 */
+ 0x1.0p0L + 0x1.7ffffffffff8p1Li, /* #25 */
+ 0x1.0p0L + 0x1.7ffffffffff0p1Li, /* #26 */
+ 0x1.0p0L + 0x1.7fffffffff80p1Li, /* #27 */
+ 0x1.0p0L + 0x1.7fffffffff00p1Li, /* #28 */
+ 0x5.0p0L + 0x5.0p0Li, /* #29 */
+ 0x4.0p0L + 0x3.0p0Li, /* #30 */
+ -0x4.0p0L + 0x3.000000001p0Li, /* #31 */
+ 0x3.00000000001p-20L + 0x1.0p0Li, /* #32 */
+ 0x1.00000000001p-80L + 0x1.0p0Li, /* #33 */
+ 0x1.00000000001p-8000L + 0x1.0p0Li, /* #34 */
+ 0x1.0p0L + 0x1.00000000001p-8000Li, /* #35 */
+ -0x1.0p0L + 0x1.00000000001p-8000Li,/* #36 */
+ -0x1.0p0L + 0x1.00000000001p-8000Li,/* #37 */
+ -0x1.0p0L + 0x1.00000000001p-8000Li,/* #38 */
+ 0x1.0p0L - 0x1.00000000001p-8000Li, /* #39 */
+ 0x1.0p1000L - 0x1.00000000001p-8000Li, /* #40 */
+ 0x1.97530p1000L - 0x1.00000000001p-8000Li, /* #41 */
+ 0x1.97530p3000L - 0x1.00000000001p-8000Li, /* #42 */
+ 0x1.97530p3770L - 0x1.00000000001p-8000Li, /* #43 */
+ 0x1.97530p4770L - 0x1.00000000001p-7000Li, /* #44 */
+ 0x1.97530p0L - 0x1.00000000001p-12000Li, /* #45 */
+ 0x1.97530p1000L - 0x1.00000000001p-11000Li, /* #46 */
+ 0x1.97530p2000L - 0x1.00000000001p-9000Li, /* #47 */
+ 0x1.97530p3000L - 0x1.00000000001p-8000Li, /* #48 */
+ 0x1.97530p4000L - 0x1.00000000001p-7000Li, /* #49 */
+ 0x1.97530p5000L - 0x1.00000000001p-6000Li, /* #50 */
+ 0x1.97530p6000L - 0x1.00000000001p-5000Li, /* #51 */
+ 0x1.97530p7000L - 0x1.00000000001p-4000Li, /* #52 */
+ 0x1.97530p8000L - 0x1.00000000001p-1000Li, /* #53 */
+ 0x1.97530p9000L - 0x1.00000000001p-0Li, /* #54 */
+ 0x1.97530p10000L + 0x1.00000000001p2000Li, /* #55 */
+ 0x1.97530p10100L + 0x1.00000000000p3000Li, /* #56 */
+ 0x1.97530p8000L + 0x1.00000000000p4000Li, /* #57 */
+ 0x1.97530p7000L + 0x1.00000000000p5000Li, /* #58 */
+ 0x1.97530p6000L + 0x1.00000000000p6000Li, /* #59 */
+ 0x1.97530p5200L + 0x1.00000000000p5200Li, /* #60 */
+ 0x1.0p1020L + 0x1.0p-844Li, /* #61 */
+ 0x1.0p920L + 0x1.0p-844Li, /* #62 */
+ 0x1.0p504L + 0x1.0p523Li, /* #63 */
+ 0x1.0p1004L + 0x1.0p-512Li, /* #64 */
+ 0x1.0p910L + 0x1.0p-512Li, /* #65 */
+ 0x1.0p865L + 0x1.0p-512Li, /* #66 */
+ 0x1.0p864L + 0x1.0p-512Li, /* #67 */
+ 0x1.0p860L + 0x1.0p-512Li, /* #68 */
+ 0x1.0p810L + 0x1.0p-512Li, /* #69 */
+ 0x1.0p710L + 0x1.0p-512Li, /* #70 */
+ 0x1.0p610L + 0x1.0p-512Li, /* #71 */
+ 0x1.0p510L + 0x1.0p-512Li, /* #72 */
+ 0x1.0p410L + 0x1.0p-512Li, /* #73 */
+ 0x13.0p4L + 0x1.0p-4Li, /* #74 */
+ 0x13.0p2L + 0x13.0p2Li, /* #75 */
+ 0x13.0p4L + 0x1.0p4Li, /* #76 */
+ 0x12.0p4L + 0x12.0p-4Li, /* #77 */
+ 0x1.0p1L + 0x12.0p1Li, /* #78 */
+ 0x1.0p2L + 0x1.0p4Li, /* #79 */
+ 0x13.0p0L + 0x0.0p0Li, /* #80 */
+ 0x1.01p12L - 0x1.037p-12Li, /* #81 */
+ -0x1.01p12L - 0x1.037p-12Li, /* #82 */
+ 0x1.01p12L - 0x1.037p-12Li, /* #83 */
+ -0x1.01p12L - 0x1.037p-12Li, /* #84 */
+ 0x1.01p12L - 0x1.037p-12Li, /* #85 */
+ 0x1.123456p3L - 0x1.789123p4Li, /* #86 */
+ 0x1.123457p3L - 0x1.789123p4Li, /* #87 */
+ 0x1.123458p3L + 0x1.789123p4Li, /* #88 */
+ 0x1.123456p3L + 0x1.789122p4Li, /* #89 */
+ 0x1.123456p3L + 0x1.789121p4Li, /* #90 */
+ 0x1.123456p3L + 0x1.789120p4Li, /* #91 */
+ 0x1.123455p3L - 0x1.789123p4Li, /* #92 */
+ 0x1.123454p3L - 0x1.789122p4Li, /* #93 */
+ -0x1.123453p3L + 0x1.789121p4Li, /* #94 */
+ 0x1.123452p3L + 0x1.789120p4Li, /* #95 */
+ 0x1.123451p3L - 0x1.789127p4Li, /* #96 */
+ 0x1.123459p3L - 0x1.789125p4Li, /* #97 */
+ -0x1.123450p3L + 0x1.789124p4Li, /* #98 */
+ 0x1.1234561p3L + 0x1.7891231p4Li, /* #99 */
+ 0x1.1234561p3L - 0x1.7891231p4Li /* #100 */
+ };
+
+__complex FTYPE y[NUMCNT] =
+ {
+ 0x1.0p0L + 0x1.0p1023Li, /* #1 */
+ 0x1.0p-1023L + 0x1.0p-1023Li, /* #2 */
+ 0x1.0p677L + 0x1.0p-677Li, /* #3 */
+ 0x1.0p0L + 0x1.0p0Li, /* #4 */
+ 0x1.0p656L + 0x1.0p-780Li, /* #5 */
+ 0x1.0p1001L + 0x1.0p-323Li, /* #6 */
+ 0x1.0p-1037L + 0x1.0p-1058Li, /* #7 */
+ 0x1.0p-1073L + 0x1.0p-1074Li, /* #8 */
+ 0x1.0p1023L + 0x1.0p1023Li, /* #9 */
+ 0x1.0p-343L + 0x1.0p-798Li, /* #10 */
+ 0x1.0p0L + 0x3.0p0Li, /* #11 */
+ -0x1.0p0L + 0x3.0p0Li, /* #12 */
+ 0x1.0p0L - 0x3.0p0Li, /* #13 */
+ 0x3.0p0L + 0x1.0p0Li, /* #14 */
+ 0x3.0p0L + 0x4.0p0Li, /* #15 */
+ -0x2.0p0L + 0x8.0p-10Li, /* #16 */
+ 0x1.0p0L + 0x3.0p-20Li, /* #17 */
+ 0x1.0p0L + 0x3.0p0Li, /* #18 */
+ 0x1.0p0L + 0x3.0p0Li, /* #19 */
+ 0x1.0p0L + 0x3.0p0Li, /* #20 */
+ 0x1.0p0L + 0x3.0p0Li, /* #21 */
+ 0x1.0p0L + 0x3.0p0Li, /* #22 */
+ 0x1.0p0L + 0x3.0p0Li, /* #23 */
+ 0x1.0p0L + 0x3.0p0Li, /* #24 */
+ 0x1.0p0L + 0x3.0p0Li, /* #25 */
+ 0x1.0p0L + 0x3.0p0Li, /* #26 */
+ 0x1.0p0L + 0x3.0p0Li, /* #27 */
+ 0x1.0p0L + 0x3.0p0Li, /* #28 */
+ 0x3.0p0L + 0x4.0p0Li, /* #29 */
+ 0x3.0p0L - 0x4.0p0Li, /* #30 */
+ -0x3.0p0L - 0x4.0p0Li, /* #31 */
+ 0x3.0p-20L + 0x1.0p0Li, /* #32 */
+ 0x1.0p-80L + 0x1.0p0Li, /* #33 */
+ 0x1.0p-80L + 0x1.0p0Li, /* #34 */
+ 0x1.0p0L + 0x1.0p-8000Li, /* #35 */
+ 0x1.0p0L + 0x1.0p-8000Li, /* #36 */
+ -0x1.0p0L + 0x1.0p-8000Li, /* #37 */
+ 0x1.0p0L - 0x1.0p-8000Li, /* #38 */
+ 0x1.0p0L + 0x1.0p-8000Li, /* #39 */
+ 0x1.0p100L + 0x1.0p-8000Li, /* #40 */
+ 0x1.97530p100L + 0x1.0p-8000Li, /* #41 */
+ 0x1.97530p300L + 0x1.0p-8000Li, /* #42 */
+ 0x1.0p-6000L + 0x1.97530p3770Li, /* #43 */
+ 0x1.0p-5000L + 0x1.97530p4770Li, /* #44 */
+ 0x1.0p-9000L + 0x1.97530p0Li, /* #45 */
+ 0x1.0p-8000L + 0x1.97530p1000Li, /* #46 */
+ 0x1.0p-7000L + 0x1.97530p2000Li, /* #47 */
+ 0x1.0p-6000L + 0x1.97530p3000Li, /* #48 */
+ 0x1.0p-5000L + 0x1.97530p4000Li, /* #49 */
+ 0x1.0p-4000L + 0x1.97530p5000Li, /* #50 */
+ 0x1.0p-3000L + 0x1.97530p6000Li, /* #51 */
+ 0x1.0p-2000L + 0x1.97530p7000Li, /* #52 */
+ 0x1.0p-1000L + 0x1.97530p8000Li, /* #53 */
+ 0x1.0p-0L + 0x1.97530p900Li, /* #54 */
+ 0x1.97530p100L + 0x1.0000p100Li, /* #55 */
+ 0x1.97530p50L + 0x1.0000p50Li, /* #56 */
+ 0x1.97530p100L + 0x1.0000p50Li, /* #57 */
+ 0x1.97530p1L + 0x1.0000p1Li, /* #58 */
+ 0x1.97530p1L + 0x1.0000p1Li, /* #59 */
+ 0x1.97530p1L + 0x1.0000p1Li, /* #60 */
+ 0x1.0p656L + 0x1.0p-730Li, /* #61 */
+ 0x1.0p656L + 0x1.0p-730Li, /* #62 */
+ 0x1.0p-500L + 0x1.0p-1000Li, /* #63 */
+ 0x1.0p0L + 0x1.0p-500Li, /* #64 */
+ 0x1.0p-110L + 0x1.0p-500Li, /* #65 */
+ 0x1.0p-155L + 0x1.0p-500Li, /* #66 */
+ 0x1.0p-156L + 0x1.0p-500Li, /* #67 */
+ 0x1.0p-160L + 0x1.0p-500Li, /* #68 */
+ 0x1.0p-210L + 0x1.0p-500Li, /* #69 */
+ 0x1.0p-310L + 0x1.0p-500Li, /* #70 */
+ 0x1.0p-410L + 0x1.0p-500Li, /* #71 */
+ 0x1.0p-510L + 0x1.0p-600Li, /* #72 */
+ 0x1.0p-610L + 0x1.0p-700Li, /* #73 */
+ 0x5.0p1L + 0x12.0p1Li, /* #74 */
+ 0x5.0p1L + 0x12.0p1Li, /* #75 */
+ 0x5.0p1L + 0x12.0p1Li, /* #76 */
+ 0x5.0p1L + 0x12.0p1Li, /* #77 */
+ 0x5.0p1L + 0x12.0p1Li, /* #78 */
+ 0x5.0p1L + 0x12.0p1Li, /* #79 */
+ 0x5.0p1L + 0x12.0p1Li, /* #80 */
+ 0x3.1p0L + 0x1.1p0Li, /* #81 */
+ -0x3.0p0L + 0x1.1p0Li, /* #82 */
+ -0x3.0p0L + 0x1.1p0Li, /* #83 */
+ 0x3.0p0L + 0x1.1p0Li, /* #84 */
+ 0x3.0p0L + 0x1.1p0Li, /* #85 */
+ 0x1.456789p2L - 0x1.789123p1Li, /* #86 */
+ 0x1.124569p2L - 0x1.781239p3Li, /* #87 */
+ 0x1.123457p3L - 0x1.789126p4Li, /* #88 */
+ 0x1.123456p1L + 0x1.891237p4Li, /* #89 */
+ 0x1.123456p2L + 0x1.357123p3Li, /* #90 */
+ 0x1.123456p3L - 0x1.789123p1Li, /* #91 */
+ 0x1.123456p1L - 0x1.789123p4Li, /* #92 */
+ 0x1.123456p2L + 0x1.789123p1Li, /* #93 */
+ 0x1.123456p3L + 0x1.789123p0Li, /* #94 */
+ -0x1.123456p1L - 0x1.789153p-2Li, /* #95 */
+ -0x1.123456p2L - 0x1.785123p7Li, /* #96 */
+ -0x1.123456p3L + 0x1.789123p9Li, /* #97 */
+ 0x1.123456p1L - 0x1.789123p20Li, /* #98 */
+ 0x1.123456p2L - 0x1.337788p21Li, /* #99 */
+ 0x1.123457p3L - 0x1.789991p3Li /* #100 */
+ };
+
+__complex FTYPE z[NUMCNT] =
+ {
+ 0x1.0p-1023L - 0x1.0p-1023Li, /* #1 */
+ 0x1.0p1023L + 0x0.0p0Li, /* #2 */
+ 0x1.0p346L - 0x1.0p-1008Li, /* #3 */
+ 0x1.0p1023L + 0x0.0p0Li, /* #4 */
+ 0x1.0p364L - 0x1.0p-1072Li, /* #5 */
+ 0x1.0p-1072L + 0x1.0p20Li, /* #6 */
+ 0x1.ffffffffff800000000020p+961L + 0x1.ffffffffff800000000020p+982Li,/* #7 */
+ 0x1.3333333333333333333333333333p-1L + 0x1.999999999999999999999999999ap-3Li,/* #8 */
+ 0.001953125L - 0.001953125Li, /* #9 */
+ 0x1.000000000000000000000000000p-279L + 0x1.f800000000000000000000000000p-729Li,/* #10 */
+ 0x1.0p0L + 0x0.0p0Li, /* #11 */
+ 0x1.0p0L + 0x0.0p0Li, /* #12 */
+ 0x1.0p0L + 0x0.0p0Li, /* #13 */
+ 0x1.0p0L + 0x0.0p0Li, /* #14 */
+ 0x1.0p0L + 0x0.0p0Li, /* #15 */
+ -0x1.fffe0061ff9e0063ff9c0063ff9cp-2L - 0x1.ff9e0061ff9c0063ff9c0063ff9cp-10Li,/* #16 */
+ 0x1.0000000000000000000030000000p+0L + 0x1.ffffffffee00000000a1fffffffap-65Li,/* #17 */
+ 0x1.0000000000001333333333333333p+0L + 0x1.9999999999999999999999999999p-54Li,/* #18 */
+ 0x1.0000000000002666666666666666p+0L + 0x1.9999999999999999999999999999p-53Li,/* #19 */
+ 0x1.0000000000004ccccccccccccccdp+0L + 0x1.9999999999999999999999999999p-52Li,/* #20 */
+ 0x1.000000000000999999999999999ap+0L + 0x1.999999999999999999999999999ap-51Li,/* #21 */
+ 0x1.0000000000013333333333333333p+0L + 0x1.999999999999999999999999999ap-50Li,/* #22 */
+ 0x1.0000000000026666666666666666p+0L + 0x1.999999999999999999999999999ap-49Li,/* #23 */
+ 0x1.000000000004cccccccccccccccdp+0L + 0x1.999999999999999999999999999ap-48Li,/* #24 */
+ 0x1.fffffffffff66666666666666666p-1L - 0x1.999999999999999999999999999ap-48Li,/* #25 */
+ 0x1.ffffffffffeccccccccccccccccdp-1L - 0x1.999999999999999999999999999ap-47Li,/* #26 */
+ 0x1.ffffffffff666666666666666666p-1L - 0x1.999999999999999999999999999ap-44Li,/* #27 */
+ 0x1.fffffffffecccccccccccccccccdp-1L - 0x1.999999999999999999999999999ap-43Li,/* #28 */
+ 0x1.6666666666666666666666666666p+0L - 0x1.999999999999999999999999999ap-3Li,/* #29 */
+ 0x0.0p0L + 0x1.0p0Li, /* #30 */
+ -0x1.47ae147ae147ae147ae147ae147bp-39L - 0x1.0000000001eb851eb851eb851eb8p+0Li,/* #31 */
+ 0x1.0000000000000000000030000000p+0L - 0x1.ffffffffee00000000a1fffffffap-65Li,/* #32 */
+ 0x1.00000000000000p0L - 0x1.0000000000000p-124Li, /* #33 */
+ 0x1.00000000000000p0L + 0x1.0000000000000p-80Li, /* #34 */
+ 0x1.00000000000000p0L + 0x1.0000000000000p-8044Li, /* #35 */
+ -0x1.00000000000000p0L + 0x1.0000000000080p-7999Li, /* #36 */
+ 0x1.00000000000000p0L - 0x1.0000000000000p-8044Li, /* #37 */
+ -0x1.00000000000000p0L + 0x1.0000000000000p-8044Li, /* #38 */
+ 0x1.00000000000000p0L - 0x1.0000000000080p-7999Li, /* #39 */
+ 0x1.00000000000000p+900L - 0x1.0000000000000p-7200Li,/* #40 */
+ 0x1.0000000000000000000000000000p+900L - 0x1.41c9b303bfbf1bb3465e771d2c5fp-7201Li,/* #41 */
+ 0x1.0000000000000000000000000000p+2700L - 0x1.41c9b303bfbf1bb3465e771d2c5fp-5601Li,/* #42 */
+ 0x1.41c9b303bfb510p-9771L - 0x1.0000000000000p0Li, /* #43 */
+ 0x1.41c9b303bfb510p-9771L - 0x1.0000000000000p0Li, /* #44 */
+ 0x1.41c9b303bfb50d65ae407974c131p-9001L - 0x1.0000000000000000000000000000p+0Li,/* #45 */
+ 0x1.41c9b303bfb50d65ae407974c131p-9001L - 0x1.0000000000000000000000000000p+0Li,/* #46 */
+ 0x1.41c9b303bfb50d65ae407974c131p-9001L - 0x1.0000000000000000000000000000p+0Li,/* #47 */
+ 0x1.41c9b303bfb50d65ae407974c131p-9001L - 0x1.0000000000000000000000000000p+0Li,/* #48 */
+ 0x1.41c9b303bfb50d65ae407974c131p-9001L - 0x1.0000000000000000000000000000p+0Li,/* #49 */
+ 0x1.41c9b303bfb50d65ae407974c131p-9001L - 0x1.0000000000000000000000000000p+0Li,/* #50 */
+ 0x1.41c9b303bfb50d65ae407974c131p-9001L - 0x1.0000000000000000000000000000p+0Li,/* #51 */
+ 0x1.41c9b303bfb50d65ae407974c131p-9001L - 0x1.0000000000000000000000000000p+0Li,/* #52 */
+ -0x1.41c9b303bfb50d65ae407974c131p-9045L - 0x1.0000000000000000000000000000p+0Li,/* #53 */
+ 0x1.41c9b303bfb50d65ae407974c131p+7199L - 0x1.0000000000000000000000000000p+8100Li,/* #54 */
+ 0x1.6f0647208a31a185daaf720445b3p+9899L - 0x1.cd580bc4697c9439a5da55b27b9dp+9898Li,/* #55 */
+ 0x1.6f0647208a31a185daaf720445b3p+10049L - 0x1.cd580bc4697c9439a5da55b27b9dp+10048Li,/* #56 */
+ 0x1.fffffffffffffffffffffffff35cp+7899L - 0x1.41c9b303bfb50d65ae407974b940p+7849Li,/* #57 */
+ 0x1.6f0647208a31a185daaf720445b3p+6998L -0x1.cd580bc4697c9439a5da55b27b9dp+6997Li,/* #58 */
+ 0x1.00000000000000p5999L + 0x0.0000000000000p0Li, /* #59 */
+ 0x1.00000000000000p5199L + 0x0.0000000000000p0Li, /* #60 */
+ 0x1.0p364L - 0x1.0p-1022Li, /* #61 */
+ 0x1.0p264L + 0x0.0p0Li, /* #62 */
+ 0x1.0p1004L + 0x1.0p1023Li, /* #63 */
+ 0x1.0p1004L - 0x1.0p504Li, /* #64 */
+ 0x1.0p1020L - 0x1.0p630Li, /* #65 */
+ 0x1.0p1020L - 0x1.0p675Li, /* #66 */
+ 0x1.0p1020L - 0x1.0p676Li, /* #67 */
+ 0x1.0p1020L - 0x1.0p680Li, /* #68 */
+ 0x1.0p1020L - 0x1.0p730Li, /* #69 */
+ 0x1.0p1020L - 0x1.0p830Li, /* #70 */
+ 0x1.0p1020L - 0x1.0p930Li, /* #71 */
+ 0x1.0p1020L - 0x1.0p930Li, /* #72 */
+ 0x1.0p1020L - 0x1.0p930Li, /* #73 */
+ 0x1.16f21023358c1a682913ce1ecedbp+1L - 0x1.f5b3b6a5c6c8fc5516bd3fd10df0p+2Li,/* #74 */
+ 0x1.408cd63069a0a44f387b3b6a5c6dp+1L - 0x1.6a5c6c8fc5516bd3fd10defdcca7p+0Li,/* #75 */
+ 0x1.4b8d91f8aa2d7a7fa21bdfb994e8p+1L - 0x1.ee6539f2cbeb7618f09892b4726ep+2Li,/* #76 */
+ 0x1.0bc8408cd63069a0a44f387b3b6ap+1L - 0x1.daceda971b23f1545af4ff4437bfp+2Li,/* #77 */
+ 0x1.e2a8b5e9fe886f7ee6539f2cbeb7p-1L + 0x1.a682913ce1eceda971b23f1545afp-3Li,/* #78 */
+ 0x1.c3d9db52e3647e2a8b5e9fe886f8p-2L + 0x1.77908119ac60d341489e70f676d5p-7Li,/* #79 */
+ 0x1.16bd3fd10defdcca73e597d6ec32p-3L - 0x1.f5bb0c784c495a393703aae942c0p-2Li,/* #80 */
+ 0x1.2b9c43596635aca22a41182c285ap+10L - 0x1.9fc933bd0b3ad039dc99076c4ce5p+8Li,/* #81 */
+ 0x1.3079a1638e441f32a5aa1b723a40p+10L + 0x1.af56ff5f5ee08187c006518c7d30p+8Li,/* #82 */
+ -0x1.3079a23d4567c32f17cb15076791p+10L - 0x1.af56f5c477a85482b70a5dca7d62p+8Li,/* #83 */
+ -0x1.3079a23d4567c32f17cb15076791p+10L + 0x1.af56f5c477a85482b70a5dca7d62p+8Li,/* #84 */
+ 0x1.3079a1638e441f32a5aa1b723a40p+10L - 0x1.af56ff5f5ee08187c006518c7d30p+8Li,/* #85 */
+ 0x1.a27419691d7845d82a1a772258e1p+1L - 0x1.5e60a434afdfd9c1419d2d842cc2p+1Li,/* #86 */
+ 0x1.004a6235052b9121263d9c6bbcf4p+1L - 0x1.077970d2017e9637b3c295f86c7cp-10Li,/* #87 */
+ -0x1.8825f329396f03f5c813952be304p-1L + 0x1.492fb9aef1c34c5b463f22218a07p-1Li,/* #88 */
+ 0x1.f6417093502e5e03be9d91d13905p-1L - 0x1.0d936b36d23867a75c17114df9ecp-2Li,/* #89 */
+ 0x1.2e6b76d3c1a73913587096f2fbbdp+1L + 0x1.4911f033da9e45b4f001b864e760p-3Li,/* #90 */
+ 0x1.a1ced84e145e8f5819427f5ea14ep-5L + 0x1.61ced4d722d37f7966cd7c068306p+1Li,/* #91 */
+ 0x1.064f7bc3e4833b1e0eff54a3a904p+0L + 0x1.1551c3ae74bd101253588f742243p-2Li,/* #92 */
+ -0x1.344545d341aa8a2f9369a5ec3128p+0L - 0x1.2aa5da272dd3d1102e6c406cbc70p+2Li,/* #93 */
+ -0x1.06d98474fe894386c4fbcde25e3bp-1L + 0x1.6ad8d7df1b0c7bd93084ecbd82ebp+1Li,/* #94 */
+ -0x1.6deb5a7bec3179206289e83a4b65p+2L - 0x1.4028b8d0a2fc1a39d6eea3f8bb57p+3Li,/* #95 */
+ 0x1.fbd4560086545ef1cd464e251162p-4L + 0x1.8c3278a9ca9b4301daab9f0d2131p-5Li,/* #96 */
+ -0x1.0106f72f51797fe080e71a8997a9p-5L - 0x1.69200e9aa701c65e7069852801a9p-7Li,/* #97 */
+ -0x1.00000929d9955dc02885e23cfb27p-16L - 0x1.74d2319d4234332ac55f42cc52d5p-18Li,/* #98 */
+ -0x1.39887db89b6869b8281a9f4222eep-17L + 0x1.c89cdfee34a155f4544297ef8798p-19Li,/* #99 */
+ 0x1.a746a452d342fdd9745efdf4d52ap+0L - 0x1.e72d9f35e28e6208e42c8cc5a560p-2Li/* #100 */
+ };
+
+
+__complex FTYPE errmax[NUMCNT] =
+ {
+ 0x0.000000000000000000000000p0L + 0x0.000000000000000000000000p0Li,/* #1 */
+ 0x0.000000000000000000000001p1023+ 0x0.000000000000000000000001p0Li,/* #2 */
+ 0x0.000000000000000000000001p346L + 0x0.000000000000000100000000p-1008Li,/* #3 */
+ 0x0.000000000000000000000001p1023+ 0x0.000000000000000000000001p0Li,/* #4 */
+ 0x0.000000000000000000000001p364L + 0x0.000000000000000000000000p0Li,/* #5 */
+ 0x0.000000000000000000000000p0L + 0x0.000000000000000000000001p20Li,/* #6 */
+ 0x0.000000000000000000000001p961L + 0x0.00000000000000000000001p982Li,/* #7 */
+ 0x0.000000000000000000000001p-1L + 0x0.00000000000000000000001p-3Li, /* #8 */
+ 0x0.000000000000000000000001p-9L + 0x0.000000000000000000000001p-9Li,/* #9 */
+ 0x0.000000000000000000000001p279L + 0x0.0000000000000000000000001p-171Li,/* #10 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000000001p0Li,/* #11 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p0Li,/* #12 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p0Li,/* #13 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p0Li,/* #14 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p0Li,/* #15 */
+ 0x0.000000000000000000000001p33L + 0x0.0000000000000000000001p-10Li,/* #16 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-65Li,/* #17 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-54Li,/* #18 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-53Li,/* #19 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-52Li,/* #20 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-51Li,/* #21 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-50Li,/* #22 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-49Li,/* #23 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-48Li,/* #24 */
+ 0x0.000000000000000000000001p-1L + 0x0.0000000000000000000001p-48Li,/* #25 */
+ 0x0.000000000000000000000001p-1L + 0x0.0000000000000000000001p-47Li,/* #26 */
+ 0x0.000000000000000000000001p-1L + 0x0.0000000000000000000001p-44Li,/* #27 */
+ 0x0.000000000000000000000001p-1L + 0x0.0000000000000000000001p-43Li,/* #28 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-3Li,/* #29 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p0Li,/* #30 */
+ 0x0.000000000000000000000001p-39L + 0x0.0000000000000000000001p0Li,/* #31 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-65Li,/* #32 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-124Li,/* #33 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-80Li,/* #34 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-8044Li,/* #35 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-7999Li,/* #36 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-8044Li,/* #37 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-8044Li,/* #38 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-7999Li,/* #39 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-7200Li,/* #40 */
+ 0x0.000000000000000000000001p900L + 0x0.0000000000000000000001p-720Li,/* #41 */
+ 0x0.000000000000000000000001p2700L + 0x0.0000000000000000000001p-560Li,/* #42 */
+ 0x0.000000000000100000000000p-9771L+ 0x0.0000000000000000000001p0Li,/* #43 */
+ 0x0.000000000000100000000001p-9771L+ 0x0.0000000000000000000001p0Li,/* #44 */
+ 0x0.000000000000000000000001p-9001L+ 0x0.0000000000000000000001p0Li,/* #45 */
+ 0x0.000000000000000000000001p-9001L+ 0x0.0000000000000000000001p0Li,/* #46 */
+ 0x0.000000000000000000000001p-9001L+ 0x0.0000000000000000000001p0Li,/* #47 */
+ 0x0.000000000000000000000001p-9001L+ 0x0.0000000000000000000001p0Li,/* #48 */
+ 0x0.000000000000000000000001p-9001L+ 0x0.0000000000000000000001p0Li,/* #49 */
+ 0x0.000000000000000000000001p-9001L+ 0x0.0000000000000000000001p0Li,/* #50 */
+ 0x0.000000000000000000000001p-9001L+ 0x0.0000000000000000000001p0Li,/* #51 */
+ 0x0.000000000000000000000001p-9001L+ 0x0.0000000000000000000001p0Li,/* #52 */
+ 0x0.000000000000000000000001p-9045L+ 0x0.0000000000000000000001p0Li,/* #53 */
+ 0x0.000000000000000000000001p7199L+ 0x0.0000000000000000000001p8100Li,/* #54 */
+ 0x0.000000000000000000000001p9899L+ 0x0.0000000000000000000001p9898Li,/* #55 */
+ 0x0.000000000000000000000001p10049L+ 0x0.0000000000000000000001p10048Li,/* #56 */
+ 0x0.000000000000000000000001p7899L+ 0x0.0000000000000000000001p7849Li,/* #57 */
+ 0x0.000000000000000000000001p6998L+ 0x0.0000000000000000000001p6997Li,/* #58 */
+ 0x0.000000000000000000000001p5999L+ 0x0.0000000000000000000001p0Li,/* #59 */
+ 0x0.000000000000000000000001p5199L+ 0x0.0000000000000000000001p0Li,/* #60 */
+ 0x0.000000000000000000000001p364L+ 0x0.0000000000000000000000p0Li,/* #61 */
+ 0x0.000000000000000000000001p264L+ 0x0.0000000000000000000001p0Li,/* #62 */
+ 0x0.000000000000000000000001p1004L+ 0x0.0000000000000000000001p1023Li,/* #63 */
+ 0x0.000000000000000000000001p1004L+ 0x0.0000000000000000000001p504Li,/* #64 */
+ 0x0.000000000000000000000001p1020L+ 0x0.0000000000000000000001p630Li,/* #65 */
+ 0x0.000000000000000000000001p1020L+ 0x0.0000000000000000000001p675Li,/* #66 */
+ 0x0.000000000000000000000001p1020L+ 0x0.0000000000000000000001p676Li,/* #67 */
+ 0x0.000000000000000000000001p1020L+ 0x0.0000000000000000000001p680Li,/* #68 */
+ 0x0.000000000000000000000001p1020L+ 0x0.0000000000000000000001p730Li,/* #69 */
+ 0x0.000000000000000000000001p1020L+ 0x0.0000000000000000000001p830Li,/* #70 */
+ 0x0.000000000000000000000001p1020L+ 0x0.0000000000000000000001p930Li,/* #71 */
+ 0x0.000000000000000000000001p1020L+ 0x0.0000000000000000000001p930Li,/* #72 */
+ 0x0.000000000000000000000001p1020L+ 0x0.0000000000000000000001p930Li,/* #73 */
+ 0x0.000000000000000000000001p7L + 0x0.0000000000000000000001p0Li,/* #74 */
+ 0x0.000000000000000000000001p1L + 0x0.0000000000000000000001p0Li,/* #75 */
+ 0x0.000000000000000000000001p1L + 0x0.0000000000000000000001p2Li,/* #76 */
+ 0x0.000000000000000000000001p1L + 0x0.0000000000000000000001p2Li,/* #77 */
+ 0x0.000000000000000000000001p-1L + 0x0.0000000000000000000001p-3Li,/* #78 */
+ 0x0.000000000000000000000001p-2L + 0x0.0000000000000000000001p-7Li,/* #79 */
+ 0x0.000000000000000000000001p-3L + 0x0.0000000000000000000001p-2Li,/* #80 */
+ 0x0.000000000000000000000001p10L + 0x0.0000000000000000000001p8Li,/* #81 */
+ 0x0.000000000000000000000001p10L + 0x0.0000000000000000000001p8Li,/* #82 */
+ 0x0.000000000000000000000001p10L + 0x0.0000000000000000000001p8Li,/* #83 */
+ 0x0.000000000000000000000001p10L + 0x0.0000000000000000000001p8Li,/* #84 */
+ 0x0.000000000000000000000001p10L + 0x0.0000000000000000000001p8Li,/* #85 */
+ 0x0.000000000000000000000001p1L + 0x0.0000000000000000000001p1Li,/* #86 */
+ 0x0.000000000000000000000001p1L + 0x0.0000000000000000000001p-10Li,/* #87 */
+ 0x0.000000000000000000000001p-1L + 0x0.0000000000000000000001p-1Li,/* #88 */
+ 0x0.000000000000000000000001p-1L + 0x0.0000000000000000000001p-2Li,/* #89 */
+ 0x0.000000000000000000000001p1L + 0x0.0000000000000000000001p-3Li,/* #90 */
+ 0x0.000000000000000000000001p-5L + 0x0.0000000000000000000001p1Li,/* #91 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-2Li,/* #92 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p2Li,/* #93 */
+ 0x0.000000000000000000000001p-1L + 0x0.0000000000000000000001p1Li,/* #94 */
+ 0x0.000000000000000000000001p2L + 0x0.0000000000000000000001p3Li,/* #95 */
+ 0x0.000000000000000000000001p-4L + 0x0.0000000000000000000001p-5Li,/* #96 */
+ 0x0.000000000000000000000001p-5L + 0x0.0000000000000000000001p-7Li,/* #97 */
+ 0x0.000000000000000000000001p-16L + 0x0.0000000000000000000001p-18Li,/* #98 */
+ 0x0.000000000000000000000001p-17L + 0x0.0000000000000000000001p-19Li,/* #99 */
+ 0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-2Li/* #100 */
+ };
+
+
+int main(int argc, char** argv)
+{
+ int i;
+ FTYPE xr, xi, yr, yi, zr, zi, zzr, zzi;
+ FTYPE er, ei;
+ __complex FTYPE ans[NUMCNT];
+ int errcnt;
+
+ errcnt = 0;
+ for (i = 0; i < NUMCNT; i++)
+ {
+ ans[i] = x[i] / y[i];
+ if( z[i] != z[i] ) /* Check for nan/inf case */
+ {
+ zr = __real__ z[i];
+ zi = __imag__ z[i];
+ zzr = __real__ ans[i];
+ zzi = __imag__ ans[i];
+ er = __real__ errmax[i];
+ ei = __imag__ errmax[i];
+ errcnt++;
+ printf("x %3d " FMT " " FMT "i\n",
+ i + 1, __real__ x[i], __imag__ x[i]);
+ printf ("y %3d " FMT " " FMT "i\n",
+ i + 1, __real__ y[i], __imag__ y[i]);
+ printf("expected " FMT " " FMT "i\n",
+ __real__ z[i], __imag__ z[i]);
+ printf("actual " FMT " " FMT "i /* #%d */ FAIL\n",
+ __real__ ans[i], __imag__ ans[i], i + 1);
+ printf("diff " FMT " " FMT "i\n",
+ zr - zzr, zi - zzi);
+ printf("errmax " FMT " " FMT "i\n\n",
+ er, ei);
+ }
+ else
+ {
+ if( z[i] != ans[i] )
+ {
+ zr = __real__ z[i];
+ zi = __imag__ z[i];
+ zzr = __real__ ans[i];
+ zzi = __imag__ ans[i];
+ er = __real__ errmax[i];
+ ei = __imag__ errmax[i];
+ if( (FABS(zr-zzr) > er) || (FABS(zi-zzi) > ei))
+ { /* report if error exceeds error max */
+ errcnt++;
+ printf("x %3d " FMT " " FMT "i\n",
+ i + 1, __real__ x[i], __imag__ x[i]);
+ printf ("y %3d " FMT " " FMT "i\n",
+ i + 1, __real__ y[i], __imag__ y[i]);
+ printf("expected " FMT " " FMT "i\n",
+ __real__ z[i], __imag__ z[i]);
+ printf("actual " FMT " " FMT "i /* #%d */ FAIL\n",
+ __real__ ans[i], __imag__ ans[i], i + 1);
+ printf("diff " FMT " " FMT "i\n",
+ zr - zzr, zi - zzi);
+ printf("errmax " FMT " " FMT "i\n\n",
+ er, ei);
+ }
+ }
+ }
+ }
+ if( errcnt > 0)
+ {
+ printf("%2d Failures\n",errcnt);
+ abort();
+ }
+ printf("PASS\n");
+ return 0;
+}
+
new file mode 100644
@@ -0,0 +1,506 @@
+#include <stdio.h>
+#include <math.h>
+
+extern void abort (void);
+#define FABS(x) ((x) >= 0 ? (x) : -(x))
+#define FTYPE float
+#define FMT "%-17.6a"
+
+/*
+ Tables of numbers for complex division testing
+ All values in hex format
+ z[i] == correctly rounded value of x[i]/y[i];
+ */
+
+#define NUMCNT 100
+
+__complex FTYPE x[NUMCNT] =
+ {
+ 0x1.0p0 + 0x1.0p0i, /* #1 */
+ 0x1.0p0 + 0x1.0p0i, /* #2 */
+ 0x1.0p127 + 0x1.0p-126i, /* #3 */
+ 0x1.0p127 + 0x1.0p127i, /* #4 */
+ 0x1.0p124 + 0x1.0p-44i, /* #5 */
+ 0x1.0p-71 + 0x1.0p125i, /* #6 */
+ 0x1.0p-47 + 0x1.0p-54i, /* #7 */
+ 0x1.0p-149 + 0x1.0p-149i, /* #8 */
+ 0x1.0p120 + 0x1.0p-89i, /* #9 */
+ 0x1.0p-22 + 0x1.0p-146i, /* #10 */
+ 0x1.0p0 + 0x3.0p0i, /* #11 */
+ -0x1.0p0 + 0x3.0p0i, /* #12 */
+ 0x1.0p0 - 0x3.0p0i, /* #13 */
+ 0x3.0p0 + 0x1.0p0i, /* #14 */
+ 0x3.0p0 + 0x4.0p0i, /* #15 */
+ 0x1.0p0 - 0x3.000002p-20i, /* #16 */
+ 0x1.0p0 + 0x3.000002p-20i, /* #17 */
+ 0x1.0p0 + 0x1.800002p1i, /* #18 */
+ 0x1.0p0 + 0x1.800004p1i, /* #19 */
+ 0x1.0p0 + 0x1.800008p1i, /* #20 */
+ 0x1.0p0 + 0x1.800010p1i, /* #21 */
+ 0x1.0p0 + 0x1.800020p1i, /* #22 */
+ 0x1.0p0 + 0x1.800040p1i, /* #23 */
+ 0x1.0p0 + 0x1.800080p1i, /* #24 */
+ 0x1.0p0 + 0x1.7ffff8p1i, /* #25 */
+ 0x1.0p0 + 0x1.7ffff0p1i, /* #26 */
+ 0x1.0p0 + 0x1.7fff80p1i, /* #27 */
+ 0x1.0p0 + 0x1.7fff00p1i, /* #28 */
+ 0x5.0p0 + 0x5.0p0i, /* #29 */
+ 0x4.0p0 + 0x3.0p0i, /* #30 */
+ -0x4.0p0 + 0x3.000004p0i, /* #31 */
+ 0x3.000004p-20 + 0x1.0p0i, /* #32 */
+ 0x1.000002p-80 + 0x1.0p0i, /* #33 */
+ 0x1.000002p-100 + 0x1.0p0i, /* #34 */
+ 0x1.0p0 + 0x1.000002p-100i, /* #35 */
+ -0x1.0p0 + 0x1.000002p-100i, /* #36 */
+ -0x1.0p0 + 0x1.000002p-100i, /* #37 */
+ -0x1.0p0 + 0x1.000002p-100i, /* #38 */
+ 0x1.0p0 - 0x1.000002p-100i, /* #39 */
+ 0x1.0p40 - 0x1.000010p-60i, /* #40 */
+ 0x1.975300p50 - 0x1.000002p-100i, /* #41 */
+ 0x1.975300p100 - 0x1.000002p-100i, /* #42 */
+ 0x1.975300p77 - 0x1.000002p-60i, /* #43 */
+ 0x1.975300p87 - 0x1.000002p-60i, /* #44 */
+ 0x1.975300p0 - 0x1.000002p-60i, /* #45 */
+ 0x1.975300p50 - 0x1.000002p-60i, /* #46 */
+ 0x1.975300p60 - 0x1.000002p-60i, /* #47 */
+ 0x1.975300p70 - 0x1.000002p-60i, /* #48 */
+ 0x1.975300p80 - 0x1.000002p-60i, /* #49 */
+ 0x1.975300p90 - 0x1.000002p-60i, /* #50 */
+ 0x1.975300p100 - 0x1.000002p-60i, /* #51 */
+ 0x1.975300p110 - 0x1.000002p-60i, /* #52 */
+ 0x1.975300p115 - 0x1.000002p-60i, /* #53 */
+ 0x1.975300p120 - 0x1.000002p-0i, /* #54 */
+ 0x1.975300p125 + 0x1.000002p70i, /* #55 */
+ 0x1.975300p126 + 0x1.000000p80i, /* #56 */
+ 0x1.975300p100 + 0x1.000000p90i, /* #57 */
+ 0x1.975300p90 + 0x1.000000p95i, /* #58 */
+ 0x1.975300p80 + 0x1.000000p100i, /* #59 */
+ 0x1.97530p72 + 0x1.000000p72i, /* #60 */
+ 0x1.0p120 + 0x1.0p-844i, /* #61 */
+ 0x1.0p90 + 0x1.0p-844i, /* #62 */
+ 0x1.0p54 + 0x1.0p53i, /* #63 */
+ 0x1.0p14 + 0x1.0p-51i, /* #64 */
+ 0x1.0p90 + 0x1.0p-51i, /* #65 */
+ 0x1.0p85 + 0x1.0p-51i, /* #66 */
+ 0x1.0p84 + 0x1.0p-51i, /* #67 */
+ 0x1.0p80 + 0x1.0p-51i, /* #68 */
+ 0x1.0p81 + 0x1.0p-51i, /* #69 */
+ 0x1.0p71 + 0x1.0p-51i, /* #70 */
+ 0x1.0p61 + 0x1.0p-51i, /* #71 */
+ 0x1.0p51 + 0x1.0p-51i, /* #72 */
+ 0x1.0p41 + 0x1.0p-51i, /* #73 */
+ 0x13.0p4 + 0x1.0p-4i, /* #74 */
+ 0x13.0p2 + 0x13.0p2i, /* #75 */
+ 0x13.0p4 + 0x1.0p4i, /* #76 */
+ 0x12.0p4 + 0x12.0p-4i, /* #77 */
+ 0x1.0p1 + 0x12.0p1i, /* #78 */
+ 0x1.0p2 + 0x1.0p4i, /* #79 */
+ 0x13.0p0 + 0x0.0p0i, /* #80 */
+ 0x1.01p12 - 0x1.037p-12i, /* #81 */
+ -0x1.01p12 - 0x1.037p-12i, /* #82 */
+ 0x1.01p12 - 0x1.037p-12i, /* #83 */
+ -0x1.01p12 - 0x1.037p-12i, /* #84 */
+ 0x1.01p12 - 0x1.037p-12i, /* #85 */
+ 0x1.123456p3 - 0x1.789123p4i, /* #86 */
+ 0x1.123457p3 - 0x1.789123p4i, /* #87 */
+ 0x1.123458p3 + 0x1.789123p4i, /* #88 */
+ 0x1.123456p3 + 0x1.789122p4i, /* #89 */
+ 0x1.123456p3 + 0x1.789121p4i, /* #90 */
+ 0x1.123456p3 + 0x1.789120p4i, /* #91 */
+ 0x1.123455p3 - 0x1.789123p4i, /* #92 */
+ 0x1.123454p3 - 0x1.789122p4i, /* #93 */
+ -0x1.123453p3 + 0x1.789121p4i, /* #94 */
+ 0x1.123452p3 + 0x1.789120p4i, /* #95 */
+ 0x1.123451p3 - 0x1.789127p4i, /* #96 */
+ 0x1.123459p3 - 0x1.789125p4i, /* #97 */
+ -0x1.123450p3 + 0x1.789124p4i, /* #98 */
+ 0x1.123456p3 + 0x1.789123p4i, /* #99 */
+ 0x1.123456p3 - 0x1.789123p4i /* #100 */
+ };
+
+__complex FTYPE y[NUMCNT] =
+ {
+ 0x1.0p0 + 0x1.0p127i, /* #1 */
+ 0x1.0p-126 + 0x1.0p-126i, /* #2 */
+ 0x1.0p77 + 0x1.0p-77i, /* #3 */
+ 0x1.0p0 + 0x1.0p0i, /* #4 */
+ 0x1.0p65 + 0x1.0p-78i, /* #5 */
+ 0x1.0p99 + 0x1.0p-33i, /* #6 */
+ 0x1.0p-133 + 0x1.0p-140i, /* #7 */
+ 0x1.0p-148 + 0x1.0p-148i, /* #8 */
+ 0x1.0p127 + 0x1.0p127i, /* #9 */
+ 0x1.0p-34 + 0x1.0p-79i, /* #10 */
+ 0x1.0p0 + 0x3.0p0i, /* #11 */
+ -0x1.0p0 + 0x3.0p0i, /* #12 */
+ 0x1.0p0 - 0x3.0p0i, /* #13 */
+ 0x3.0p0 + 0x1.0p0i, /* #14 */
+ 0x3.0p0 + 0x4.0p0i, /* #15 */
+ -0x2.0p0 + 0x8.0p-10i, /* #16 */
+ 0x1.0p0 + 0x3.0p-20i, /* #17 */
+ 0x1.0p0 + 0x3.0p0i, /* #18 */
+ 0x1.0p0 + 0x3.0p0i, /* #19 */
+ 0x1.0p0 + 0x3.0p0i, /* #20 */
+ 0x1.0p0 + 0x3.0p0i, /* #21 */
+ 0x1.0p0 + 0x3.0p0i, /* #22 */
+ 0x1.0p0 + 0x3.0p0i, /* #23 */
+ 0x1.0p0 + 0x3.0p0i, /* #24 */
+ 0x1.0p0 + 0x3.0p0i, /* #25 */
+ 0x1.0p0 + 0x3.0p0i, /* #26 */
+ 0x1.0p0 + 0x3.0p0i, /* #27 */
+ 0x1.0p0 + 0x3.0p0i, /* #28 */
+ 0x3.0p0 + 0x4.0p0i, /* #29 */
+ 0x3.0p0 - 0x4.0p0i, /* #30 */
+ -0x3.0p0 - 0x4.0p0i, /* #31 */
+ 0x3.0p-20 + 0x1.0p0i, /* #32 */
+ 0x1.000000p-80 + 0x1.0p0i, /* #33 */
+ 0x1.0p-80 + 0x1.0p0i, /* #34 */
+ 0x1.0p0 + 0x1.0p-60i, /* #35 */
+ 0x1.0p0 + 0x1.0p-60i, /* #36 */
+ -0x1.0p0 + 0x1.0p-60i, /* #37 */
+ 0x1.0p0 - 0x1.0p-60i, /* #38 */
+ 0x1.0p0 + 0x1.0p-60i, /* #39 */
+ 0x1.0p40 + 0x1.0p-60i, /* #40 */
+ 0x1.97530p50 + 0x1.0p-60i, /* #41 */
+ 0x1.97530p80 + 0x1.0p-60i, /* #42 */
+ 0x1.0p-60 + 0x1.97530p57i, /* #43 */
+ 0x1.0p-50 + 0x1.97530p57i, /* #44 */
+ 0x1.0p-90 + 0x1.97530p0i, /* #45 */
+ 0x1.0p-80 + 0x1.97530p10i, /* #46 */
+ 0x1.0p-70 + 0x1.97530p20i, /* #47 */
+ 0x1.0p-60 + 0x1.97530p30i, /* #48 */
+ 0x1.0p-50 + 0x1.97530p40i, /* #49 */
+ 0x1.0p-40 + 0x1.97530p50i, /* #50 */
+ 0x1.0p-30 + 0x1.97530p60i, /* #51 */
+ 0x1.0p-20 + 0x1.97530p70i, /* #52 */
+ 0x1.0p-10 + 0x1.97530p80i, /* #53 */
+ 0x1.0p-0 + 0x1.97530p90i, /* #54 */
+ 0x1.97530p10 + 0x1.0000p10i, /* #55 */
+ 0x1.97530p50 + 0x1.0000p50i, /* #56 */
+ 0x1.97530p10 + 0x1.0000p50i, /* #57 */
+ 0x1.97530p1 + 0x1.0000p1i, /* #58 */
+ 0x1.97530p1 + 0x1.0000p1i, /* #59 */
+ 0x1.97530p1 + 0x1.0000p1i, /* #60 */
+ 0x1.0p66 + 0x1.0p-73i, /* #61 */
+ 0x1.0p66 + 0x1.0p-73i, /* #62 */
+ 0x1.0p-50 + 0x1.0p-100i, /* #63 */
+ 0x1.0p0 + 0x1.0p-50i, /* #64 */
+ 0x1.0p-11 + 0x1.0p-50i, /* #65 */
+ 0x1.0p-14 + 0x1.0p-50i, /* #66 */
+ 0x1.0p-15 + 0x1.0p-50i, /* #67 */
+ 0x1.0p-16 + 0x1.0p-50i, /* #68 */
+ 0x1.0p-21 + 0x1.0p-50i, /* #69 */
+ 0x1.0p-31 + 0x1.0p-50i, /* #70 */
+ 0x1.0p-41 + 0x1.0p-50i, /* #71 */
+ 0x1.0p-51 + 0x1.0p-60i, /* #72 */
+ 0x1.0p-61 + 0x1.0p-70i, /* #73 */
+ 0x5.0p1 + 0x12.0p1i, /* #74 */
+ 0x5.0p1 + 0x12.0p1i, /* #75 */
+ 0x5.0p1 + 0x12.0p1i, /* #76 */
+ 0x5.0p1 + 0x12.0p1i, /* #77 */
+ 0x5.0p1 + 0x12.0p1i, /* #78 */
+ 0x5.0p1 + 0x12.0p1i, /* #79 */
+ 0x5.0p1 + 0x12.0p1i, /* #80 */
+ 0x3.1p0 + 0x1.1p0i, /* #81 */
+ -0x3.0p0 + 0x1.1p0i, /* #82 */
+ -0x3.0p0 + 0x1.1p0i, /* #83 */
+ 0x3.0p0 + 0x1.1p0i, /* #84 */
+ 0x3.0p0 + 0x1.1p0i, /* #85 */
+ 0x1.456789p2 - 0x1.789123p1i, /* #86 */
+ 0x1.124569p2 - 0x1.781239p3i, /* #87 */
+ 0x1.123457p3 - 0x1.789126p4i, /* #88 */
+ 0x1.123456p1 + 0x1.891237p4i, /* #89 */
+ 0x1.123456p2 + 0x1.357123p3i, /* #90 */
+ 0x1.123456p3 - 0x1.789123p1i, /* #91 */
+ 0x1.123456p1 - 0x1.789123p4i, /* #92 */
+ 0x1.123456p2 + 0x1.789123p1i, /* #93 */
+ 0x1.123456p3 + 0x1.789123p0i, /* #94 */
+ -0x1.123456p1 - 0x1.789153p-2i, /* #95 */
+ -0x1.123456p2 - 0x1.785123p7i, /* #96 */
+ -0x1.123456p3 + 0x1.789123p9i, /* #97 */
+ 0x1.123456p1 - 0x1.789123p20i, /* #98 */
+ 0x1.123456p2 - 0x1.337788p21i, /* #99 */
+ 0x1.123457p3 - 0x1.789991p3i /* #100 */
+ };
+
+__complex FTYPE z[NUMCNT] =
+ {
+ 0x1.0p-127 - 0x1.0p-127i, /* #1 */
+ 0x1.0p126 + 0x0.0p0i, /* #2 */
+ 0x1.0p50 - 0x1.0p-104i, /* #3 */
+ 0x1.0p127 + 0x0.0p0i, /* #4 */
+ 0x1.0p59 - 0x1.0p-84i, /* #5 */
+ 0x1.0p-106 + 0x1.0p26i, /* #6 */
+ 0x1.0p86 + 0x0.0p0i, /* #7 */
+ 0x1.0p-1 + 0x0.0p0i, /* #8 */
+ 0x1.0p-8 - 0x1.0p-8i, /* #9 */
+ 0x1.0p12 - 0x1.0p-33i, /* #10 */
+ 0x1.0p0 + 0x0.0p0i, /* #11 */
+ 0x1.0p0 + 0x0.0p0i, /* #12 */
+ 0x1.0p0 + 0x0.0p0i, /* #13 */
+ 0x1.0p0 + 0x0.0p0i, /* #14 */
+ 0x1.0p0 + 0x0.0p0i, /* #15 */
+ -0x1.fffe00p-2 - 0x1.ff9e00p-10i, /* #16 */
+ 0x1.000000p0 + 0x0.000000p0i, /* #17 */
+ 0x1.000002p0 + 0x1.99999ap-26i, /* #18 */
+ 0x1.000002p0 + 0x1.99999ap-25i, /* #19 */
+ 0x1.000004p0 + 0x1.99999ap-24i, /* #20 */
+ 0x1.00000ap0 + 0x1.99999ap-23i, /* #21 */
+ 0x1.000014p0 + 0x1.99999ap-22i, /* #22 */
+ 0x1.000026p0 + 0x1.99999ap-21i, /* #23 */
+ 0x1.00004cp0 + 0x1.99999ap-20i, /* #24 */
+ 0x1.fffff6p-1 - 0x1.99999ap-24i, /* #25 */
+ 0x1.ffffecp-1 - 0x1.99999ap-23i, /* #26 */
+ 0x1.ffff66p-1 - 0x1.99999ap-20i, /* #27 */
+ 0x1.fffeccp-1 - 0x1.99999ap-19i, /* #28 */
+ 0x1.666666p0 - 0x1.99999ap-3i, /* #29 */
+ 0x0.0p0 + 0x1.0p0i, /* #30 */
+ -0x1.47ae14p-25 - 0x1.000000p0i, /* #31 */
+ 0x1.000000p0 - 0x1.000000p-42i, /* #32 */
+ 0x1.000000p0 - 0x1.000000p-103i, /* #33 */
+ 0x1.000000p0 + 0x1.ffffe0p-81i, /* #34 */
+ 0x1.000000p0 - 0x1.000000p-60i, /* #35 */
+ -0x1.000000p0 + 0x1.000000p-60i, /* #36 */
+ 0x1.000000p0 + 0x1.000000p-60i, /* #37 */
+ -0x1.0000000p0 - 0x1.000000p-60i, /* #38 */
+ 0x1.000000p0 - 0x1.000000p-60i, /* #39 */
+ 0x1.000000p0 - 0x1.000008p-99i, /* #40 */
+ 0x1.000000p0 - 0x1.41c9b4p-111i, /* #41 */
+ 0x1.000000p20 - 0x1.41c9b4p-121i, /* #42 */
+ 0x1.41c99ep-98 - 0x1.000000p20i, /* #43 */
+ 0x1.41c9b4p-78 - 0x1.000000p30i, /* #44 */
+ -0x1.41c9b6p-61 - 0x1.000000p0i, /* #45 */
+ 0x1.41c99ep-51 - 0x1.000000p40i, /* #46 */
+ 0x1.41c9b4p-51 - 0x1.000000p40i, /* #47 */
+ 0x1.41c9b4p-51 - 0x1.000000p40i, /* #48 */
+ 0x1.41c9b4p-51 - 0x1.000000p40i, /* #49 */
+ 0x1.41c9b4p-51 - 0x1.000000p40i, /* #50 */
+ 0x1.41c9b4p-51 - 0x1.000000p40i, /* #51 */
+ 0x1.41c9b4p-51 - 0x1.000000p40i, /* #52 */
+ 0x1.41c9b4p-56 - 0x1.000000p35i, /* #53 */
+ 0x1.41c9b4p-61 - 0x1.000000p30i, /* #54 */
+ 0x1.6f0648p114 - 0x1.cd580cp113i, /* #55 */
+ 0x1.6f0648p75 - 0x1.cd580cp74i, /* #56 */
+ 0x1.000000p40 - 0x1.975300p50i, /* #57 */
+ 0x1.38e3d6p92 + 0x1.beed4cp92i, /* #58 */
+ 0x1.21f3a0p97 + 0x1.cd57eep97i, /* #59 */
+ 0x1.000000p71 + 0x0.000000p0i, /* #60 */
+ 0x1.000000p54 - 0x1.000000p-85i, /* #61 */
+ 0x1.000000p24 - 0x1.000000p-115i, /* #62 */
+ 0x1.000000p104 + 0x1.000000p103i, /* #63 */
+ 0x1.000000p14 - 0x1.fffc00p-37i, /* #64 */
+ 0x1.000000p101 - 0x1.000000p62i, /* #65 */
+ 0x1.000000p99 - 0x1.000000p63i, /* #66 */
+ 0x1.000000p99 - 0x1.000000p64i, /* #67 */
+ 0x1.000000p96 - 0x1.000000p62i, /* #68 */
+ 0x1.000000p102 - 0x1.000000p73i, /* #69 */
+ 0x1.000000p102 - 0x1.000000p83i, /* #70 */
+ 0x1.ffff80p101 - 0x1.ffff80p92i, /* #71 */
+ 0x1.ffff80p101 - 0x1.ffff80p92i, /* #72 */
+ 0x1.ffff80p101 - 0x1.ffff80p92i, /* #73 */
+ 0x1.16f210p1 - 0x1.f5b3b6p2i, /* #74 */
+ 0x1.408cd6p1 - 0x1.6a5c6cp0i, /* #75 */
+ 0x1.4b8d92p1 - 0x1.ee653ap2i, /* #76 */
+ 0x1.0bc840p1 - 0x1.dacedap2i, /* #77 */
+ 0x1.e2a8b6p-1 + 0x1.a68292p-3i, /* #78 */
+ 0x1.c3d9dcp-2 + 0x1.779082p-7i, /* #79 */
+ 0x1.16bd40p-3 - 0x1.f5bb0cp-2i, /* #80 */
+ 0x1.2b9c44p10 - 0x1.9fc934p8i, /* #81 */
+ 0x1.3079a2p10 + 0x1.af5700p8i, /* #82 */
+ -0x1.3079a2p10 - 0x1.af56f6p8i, /* #83 */
+ -0x1.3079a2p10 + 0x1.af56f6p8i, /* #84 */
+ 0x1.3079a2p10 - 0x1.af5700p8i, /* #85 */
+ 0x1.a2741cp1 - 0x1.5e60a4p1i, /* #86 */
+ 0x1.004a64p1 - 0x1.077824p-10i, /* #87 */
+ -0x1.8825f4p-1 + 0x1.492fbap-1i, /* #88 */
+ 0x1.f64170p-1 - 0x1.0d936ap-2i, /* #89 */
+ 0x1.2e6b76p1 + 0x1.4911e4p-3i, /* #90 */
+ 0x1.a1cec6p-5 + 0x1.61ced4p1i, /* #91 */
+ 0x1.064f7cp0 + 0x1.1551c2p-2i, /* #92 */
+ -0x1.344548p0 - 0x1.2aa5dap2i, /* #93 */
+ -0x1.06d986p-1 + 0x1.6ad8d8p1i, /* #94 */
+ -0x1.6deb5ap2 - 0x1.4028b8p3i, /* #95 */
+ 0x1.fbd456p-4 + 0x1.8c3276p-5i, /* #96 */
+ -0x1.0106f6p-5 - 0x1.69200cp-7i, /* #97 */
+ -0x1.000008p-16 - 0x1.74d230p-18i, /* #98 */
+ -0x1.39887ep-17 + 0x1.c89ce0p-19i, /* #99 */
+ 0x1.a746a4p0 - 0x1.e72da8p-2i /* #100 */
+ };
+
+
+__complex FTYPE errmax[NUMCNT] =
+ {
+ 0x0.000000p0 + 0x0.000000p0i, /* #1 */
+ 0x0.000002p126 + 0x0.000002p-126i, /* #2 */
+ 0x0.000002p50 + 0x0.000002p-104i, /* #3 */
+ 0x0.000002p127 + 0x0.000002p0i, /* #4 */
+ 0x0.000002p59 + 0x0.000002p-84i, /* #5 */
+ 0x0.000000p-106 + 0x0.000002p26i, /* #6 */
+ 0x0.000002p86 + 0x0.000002p0i, /* #7 */
+ 0x0.000002p-1 + 0x0.000002p0i, /* #8 */
+ 0x0.000002p-8 + 0x0.000002p-8i, /* #9 */
+ 0x0.000002p12 + 0x0.000002p-33i, /* #10 */
+ 0x0.000002p0 + 0x0.000002p0i, /* #11 */
+ 0x0.000002p0 + 0x0.000002p0i, /* #12 */
+ 0x0.000002p0 + 0x0.000002p0i, /* #13 */
+ 0x0.000002p0 + 0x0.000002p0i, /* #14 */
+ 0x0.000002p0 + 0x0.000002p0i, /* #15 */
+ 0x0.000002p-2 + 0x0.000002p-10i, /* #16 */
+ 0x0.000002p0 + 0x0.000002p0i, /* #17 */
+ 0x0.000002p0 + 0x0.000002p-26i, /* #18 */
+ 0x0.000002p0 + 0x0.000002p-25i, /* #19 */
+ 0x0.000002p0 + 0x0.000002p-24i, /* #20 */
+ 0x0.000002p0 + 0x0.000002p-23i, /* #21 */
+ 0x0.000002p0 + 0x0.000002p-22i, /* #22 */
+ 0x0.000002p0 + 0x0.000002p-21i, /* #23 */
+ 0x0.000002p0 + 0x0.000002p-20i, /* #24 */
+ 0x0.000002p-1 + 0x0.000002p-24i, /* #25 */
+ 0x0.000002p-1 + 0x0.000002p-23i, /* #26 */
+ 0x0.000002p-1 + 0x0.000002p-20i, /* #27 */
+ 0x0.000002p-1 + 0x0.000002p-19i, /* #28 */
+ 0x0.000002p0 + 0x0.000002p-3i, /* #29 */
+ 0x0.000002p0 + 0x0.000002p0i, /* #30 */
+ 0x0.000002p-25 + 0x0.000002p0i, /* #31 */
+ 0x0.000002p0 + 0x0.000002p-42i, /* #32 */
+ 0x0.000002p0 + 0x0.000002p-103i, /* #33 */
+ 0x0.000002p0 + 0x0.000002p-81i, /* #34 */
+ 0x0.000002p0 + 0x0.000002p-60i, /* #35 */
+ 0x0.000002p0 + 0x0.000002p-60i, /* #36 */
+ 0x0.000002p0 + 0x0.000002p-60i, /* #37 */
+ 0x0.000002p0 + 0x0.000002p-60i, /* #38 */
+ 0x0.000002p0 + 0x0.000002p-60i, /* #39 */
+ 0x0.000002p0 + 0x0.000002p-99i, /* #40 */
+ 0x0.000002p0 + 0x0.000002p-111i, /* #41 */
+ 0x0.000002p20 + 0x0.000002p-121i, /* #42 */
+ 0x0.0042000p-98 + 0x0.000002p20i, /* #43 */
+ 0x0.0042000p-78 + 0x0.000002p30i, /* #44 */
+ 0x0.004201p-61 + 0x0.000002p0i, /* #45 */
+ 0x0.004201p-51 + 0x0.000002p40i, /* #46 */
+ 0x0.004201p-51 + 0x0.000002p40i, /* #47 */
+ 0x0.004201p-51 + 0x0.000002p40i, /* #48 */
+ 0x0.004201p-51 + 0x0.000002p40i, /* #49 */
+ 0x0.004201p-51 + 0x0.000002p40i, /* #50 */
+ 0x0.004201p-51 + 0x0.000002p40i, /* #51 */
+ 0x0.004201p-51 + 0x0.000002p40i, /* #52 */
+ 0x0.004201p-56 + 0x0.000002p35i, /* #53 */
+ 0x0.004201p-61 + 0x0.000002p30i, /* #54 */
+ 0x0.000002p114 + 0x0.000002p113i, /* #55 */
+ 0x0.000002p75 + 0x0.000002p74i, /* #56 */
+ 0x0.000002p40 + 0x0.000002p50i, /* #57 */
+ 0x0.000002p92 + 0x0.000002p92i, /* #58 */
+ 0x0.000002p97 + 0x0.000002p97i, /* #59 */
+ 0x0.000002p71 + 0x0.000002p0i, /* #60 */
+ 0x0.000002p54 + 0x0.000000p-85i, /* #61 */
+ 0x0.000002p24 + 0x0.000002p-115i, /* #62 */
+ 0x0.000002p104 + 0x0.000002p103i, /* #63 */
+ 0x0.000002p14 + 0x0.000002p-37i, /* #64 */
+ 0x0.000002p101 + 0x0.000002p62i, /* #65 */
+ 0x0.000002p99 + 0x0.000002p63i, /* #66 */
+ 0x0.000002p99 + 0x0.000002p64i, /* #67 */
+ 0x0.000002p96 + 0x0.000002p62i, /* #68 */
+ 0x0.000002p102 + 0x0.000002p73i, /* #69 */
+ 0x0.000002p102 + 0x0.000002p83i, /* #70 */
+ 0x0.000002p101 + 0x0.000002p92i, /* #71 */
+ 0x0.000002p101 + 0x0.000002p92i, /* #72 */
+ 0x0.000002p101 + 0x0.000002p92i, /* #73 */
+ 0x0.000002p1 + 0x0.000002p2i, /* #74 */
+ 0x0.000002p1 + 0x0.000002p0i, /* #75 */
+ 0x0.000002p1 + 0x0.000002p2i, /* #76 */
+ 0x0.000002p1 + 0x0.000002p2i, /* #77 */
+ 0x0.000002p-1 + 0x0.000002p-3i, /* #78 */
+ 0x0.000002p-2 + 0x0.00000ap-7i, /* #79 */
+ 0x0.000002p-3 + 0x0.000002p-2i, /* #80 */
+ 0x0.000002p10 + 0x0.000002p8i, /* #81 */
+ 0x0.000002p10 + 0x0.000002p8i, /* #82 */
+ 0x0.000002p10 + 0x0.000002p8i, /* #83 */
+ 0x0.000002p10 + 0x0.000002p8i, /* #84 */
+ 0x0.000002p10 + 0x0.000002p8i, /* #85 */
+ 0x0.000002p1 + 0x0.000002p1i, /* #86 */
+ 0x0.000002p1 + 0x0.0000c0p-9i, /* #87 */
+ 0x0.000002p-1 + 0x0.000002p-1i, /* #88 */
+ 0x0.000002p-1 + 0x0.000002p-2i, /* #89 */
+ 0x0.000002p1 + 0x0.000004p-3i, /* #90 */
+ 0x0.000152p-5 + 0x0.000002p1i, /* #91 */
+ 0x0.000002p0 + 0x0.000002p-2i, /* #92 */
+ 0x0.000002p0 + 0x0.000002p2i, /* #93 */
+ 0x0.000002p-1 + 0x0.000002p1i, /* #94 */
+ 0x0.000002p2 + 0x0.000002p3i, /* #95 */
+ 0x0.000002p-4 + 0x0.000002p-5i, /* #96 */
+ 0x0.000002p-5 + 0x0.000002p-7i, /* #97 */
+ 0x0.000002p-16 + 0x0.000002p-18i, /* #98 */
+ 0x0.000002p-17 + 0x0.000002p-19i, /* #99 */
+ 0x0.000002p0 + 0x0.000004p-2i /* #100 */
+ };
+
+
+int main(int argc, char** argv)
+{
+ int i;
+ FTYPE xr, xi, yr, yi, zr, zi, zzr, zzi;
+ FTYPE er, ei;
+ __complex FTYPE ans[NUMCNT];
+ int errcnt;
+
+ errcnt = 0;
+ for (i = 0; i < NUMCNT; i++)
+ {
+ ans[i] = x[i] / y[i];
+ if( z[i] != z[i] ) /* Check for nan/inf case */
+ {
+ zr = __real__ z[i];
+ zi = __imag__ z[i];
+ zzr = __real__ ans[i];
+ zzi = __imag__ ans[i];
+ er = __real__ errmax[i];
+ ei = __imag__ errmax[i];
+ errcnt++;
+ printf("x %3d " FMT " " FMT "i\n",
+ i + 1, __real__ x[i], __imag__ x[i]);
+ printf ("y %3d " FMT " " FMT "i\n",
+ i + 1, __real__ y[i], __imag__ y[i]);
+ printf("expected " FMT " " FMT "i\n",
+ __real__ z[i], __imag__ z[i]);
+ printf("actual " FMT " " FMT "i /* #%d */ FAIL\n",
+ __real__ ans[i], __imag__ ans[i], i + 1);
+ printf("diff " FMT " " FMT "i\n",
+ zr - zzr, zi - zzi);
+ printf("errmax " FMT " " FMT "i\n\n",
+ er, ei);
+ }
+ else
+ {
+ if( z[i] != ans[i] )
+ {
+ zr = __real__ z[i];
+ zi = __imag__ z[i];
+ zzr = __real__ ans[i];
+ zzi = __imag__ ans[i];
+ er = __real__ errmax[i];
+ ei = __imag__ errmax[i];
+ if( (FABS(zr-zzr) > er) || (FABS(zi-zzi) > ei))
+ { /* report if error exceeds error max */
+ errcnt++;
+ printf("x %3d " FMT " " FMT "i\n",
+ i + 1, __real__ x[i], __imag__ x[i]);
+ printf ("y %3d " FMT " " FMT "i\n",
+ i + 1, __real__ y[i], __imag__ y[i]);
+ printf("expected " FMT " " FMT "i\n",
+ __real__ z[i], __imag__ z[i]);
+ printf("actual " FMT " " FMT "i /* #%d */ FAIL\n",
+ __real__ ans[i], __imag__ ans[i], i + 1);
+ printf("diff " FMT " " FMT "i\n",
+ zr - zzr, zi - zzi);
+ printf("errmax " FMT " " FMT "i\n\n",
+ er, ei);
+ }
+ }
+ }
+ }
+ if( errcnt > 0)
+ {
+ printf("%2d Failures\n",errcnt);
+ abort();
+ }
+ printf("PASS\n");
+ return 0;
+}
+
new file mode 100644
@@ -0,0 +1,506 @@
+#include <stdio.h>
+#include <math.h>
+
+extern void abort (void);
+#define FABS(x) ((x) >= 0 ? (x) : -(x))
+#define FTYPE double
+#define FMT "%-24.13a"
+
+/*
+ Tables of numbers for complex division testing
+ All values in hex format
+ z[i] == correctly rounded value of x[i]/y[i];
+ */
+
+#define NUMCNT 100
+
+__complex FTYPE x[NUMCNT] =
+ {
+ 0x1.0p0 + 0x1.0p0i, /* #1 */
+ 0x1.0p0 + 0x1.0p0i, /* #2 */
+ 0x1.0p1023 + 0x1.0p-1023i, /* #3 */
+ 0x1.0p1023 + 0x1.0p1023i, /* #4 */
+ 0x1.0p1020 + 0x1.0p-844i, /* #5 */
+ 0x1.0p-71 + 0x1.0p1021i, /* #6 */
+ 0x1.0p-347 + 0x1.0p-54i, /* #7 */
+ 0x1.0p-1074 + 0x1.0p-1074i, /* #8 */
+ 0x1.0p1015 + 0x1.0p-989i, /* #9 */
+ 0x1.0p-622 + 0x1.0p-1071i, /* #10 */
+ 0x1.0p0 + 0x3.0p0i, /* #11 */
+ -0x1.0p0 + 0x3.0p0i, /* #12 */
+ 0x1.0p0 - 0x3.0p0i, /* #13 */
+ 0x3.0p0 + 0x1.0p0i, /* #14 */
+ 0x3.0p0 + 0x4.0p0i, /* #15 */
+ 0x1.0p0 - 0x3.000000001p-20i, /* #16 */
+ 0x1.0p0 + 0x3.00000000001p-20i, /* #17 */
+ 0x1.0p0 + 0x1.8000000000002p1i, /* #18 */
+ 0x1.0p0 + 0x1.8000000000004p1i, /* #19 */
+ 0x1.0p0 + 0x1.8000000000008p1i, /* #20 */
+ 0x1.0p0 + 0x1.8000000000010p1i, /* #21 */
+ 0x1.0p0 + 0x1.8000000000020p1i, /* #22 */
+ 0x1.0p0 + 0x1.8000000000040p1i, /* #23 */
+ 0x1.0p0 + 0x1.8000000000080p1i, /* #24 */
+ 0x1.0p0 + 0x1.7ffffffffff8p1i, /* #25 */
+ 0x1.0p0 + 0x1.7ffffffffff0p1i, /* #26 */
+ 0x1.0p0 + 0x1.7fffffffff80p1i, /* #27 */
+ 0x1.0p0 + 0x1.7fffffffff00p1i, /* #28 */
+ 0x5.0p0 + 0x5.0p0i, /* #29 */
+ 0x4.0p0 + 0x3.0p0i, /* #30 */
+ -0x4.0p0 + 0x3.000000001p0i, /* #31 */
+ 0x3.00000000001p-20 + 0x1.0p0i, /* #32 */
+ 0x1.00000000001p-80 + 0x1.0p0i, /* #33 */
+ 0x1.00000000001p-600 + 0x1.0p0i, /* #34 */
+ 0x1.0p0 + 0x1.00000000001p-600i, /* #35 */
+ -0x1.0p0 + 0x1.00000000001p-600i, /* #36 */
+ -0x1.0p0 + 0x1.00000000001p-600i, /* #37 */
+ -0x1.0p0 + 0x1.00000000001p-600i, /* #38 */
+ 0x1.0p0 - 0x1.00000000001p-600i, /* #39 */
+ 0x1.0p100 - 0x1.00000000001p-600i, /* #40 */
+ 0x1.97530p100 - 0x1.00000000001p-600i, /* #41 */
+ 0x1.97530p300 - 0x1.00000000001p-600i, /* #42 */
+ 0x1.97530p377 - 0x1.00000000001p-600i, /* #43 */
+ 0x1.97530p477 - 0x1.00000000001p-500i, /* #44 */
+ 0x1.97530p0 - 0x1.00000000001p-900i, /* #45 */
+ 0x1.97530p100 - 0x1.00000000001p-800i, /* #46 */
+ 0x1.97530p200 - 0x1.00000000001p-700i, /* #47 */
+ 0x1.97530p300 - 0x1.00000000001p-600i, /* #48 */
+ 0x1.97530p400 - 0x1.00000000001p-500i, /* #49 */
+ 0x1.97530p500 - 0x1.00000000001p-400i, /* #50 */
+ 0x1.97530p600 - 0x1.00000000001p-300i, /* #51 */
+ 0x1.97530p700 - 0x1.00000000001p-200i, /* #52 */
+ 0x1.97530p800 - 0x1.00000000001p-100i, /* #53 */
+ 0x1.97530p900 - 0x1.00000000001p-0i, /* #54 */
+ 0x1.97530p1000 + 0x1.00000000001p200i, /* #55 */
+ 0x1.97530p1010 + 0x1.00000000000p300i, /* #56 */
+ 0x1.97530p800 + 0x1.00000000000p400i, /* #57 */
+ 0x1.97530p700 + 0x1.00000000000p500i, /* #58 */
+ 0x1.97530p600 + 0x1.00000000000p600i, /* #59 */
+ 0x1.97530p520 + 0x1.00000000000p520i, /* #60 */
+ 0x1.0p1020 + 0x1.0p-844i, /* #61 */
+ 0x1.0p920 + 0x1.0p-844i, /* #62 */
+ 0x1.0p504 + 0x1.0p523i, /* #63 */
+ 0x1.0p1004 + 0x1.0p-512i, /* #64 */
+ 0x1.0p910 + 0x1.0p-512i, /* #65 */
+ 0x1.0p865 + 0x1.0p-512i, /* #66 */
+ 0x1.0p864 + 0x1.0p-512i, /* #67 */
+ 0x1.0p860 + 0x1.0p-512i, /* #68 */
+ 0x1.0p810 + 0x1.0p-512i, /* #69 */
+ 0x1.0p710 + 0x1.0p-512i, /* #70 */
+ 0x1.0p610 + 0x1.0p-512i, /* #71 */
+ 0x1.0p510 + 0x1.0p-512i, /* #72 */
+ 0x1.0p410 + 0x1.0p-512i, /* #73 */
+ 0x13.0p4 + 0x1.0p-4i, /* #74 */
+ 0x13.0p2 + 0x13.0p2i, /* #75 */
+ 0x13.0p4 + 0x1.0p4i, /* #76 */
+ 0x12.0p4 + 0x12.0p-4i, /* #77 */
+ 0x1.0p1 + 0x12.0p1i, /* #78 */
+ 0x1.0p2 + 0x1.0p4i, /* #79 */
+ 0x13.0p0 + 0x0.0p0i, /* #80 */
+ 0x1.01p12 - 0x1.037p-12i, /* #81 */
+ -0x1.01p12 - 0x1.037p-12i, /* #82 */
+ 0x1.01p12 - 0x1.037p-12i, /* #83 */
+ -0x1.01p12 - 0x1.037p-12i, /* #84 */
+ 0x1.01p12 - 0x1.037p-12i, /* #85 */
+ 0x1.123456p3 - 0x1.789123p4i, /* #86 */
+ 0x1.123457p3 - 0x1.789123p4i, /* #87 */
+ 0x1.123458p3 + 0x1.789123p4i, /* #88 */
+ 0x1.123456p3 + 0x1.789122p4i, /* #89 */
+ 0x1.123456p3 + 0x1.789121p4i, /* #90 */
+ 0x1.123456p3 + 0x1.789120p4i, /* #91 */
+ 0x1.123455p3 - 0x1.789123p4i, /* #92 */
+ 0x1.123454p3 - 0x1.789122p4i, /* #93 */
+ -0x1.123453p3 + 0x1.789121p4i, /* #94 */
+ 0x1.123452p3 + 0x1.789120p4i, /* #95 */
+ 0x1.123451p3 - 0x1.789127p4i, /* #96 */
+ 0x1.123459p3 - 0x1.789125p4i, /* #97 */
+ -0x1.123450p3 + 0x1.789124p4i, /* #98 */
+ 0x1.1234561p3 + 0x1.7891231p4i, /* #99 */
+ 0x1.1234561p3 - 0x1.7891231p4i /* #100 */
+ };
+
+__complex FTYPE y[NUMCNT] =
+ {
+ 0x1.0p0 + 0x1.0p1023i, /* #1 */
+ 0x1.0p-1023 + 0x1.0p-1023i, /* #2 */
+ 0x1.0p677 + 0x1.0p-677i, /* #3 */
+ 0x1.0p0 + 0x1.0p0i, /* #4 */
+ 0x1.0p656 + 0x1.0p-780i, /* #5 */
+ 0x1.0p1001 + 0x1.0p-323i, /* #6 */
+ 0x1.0p-1037 + 0x1.0p-1058i, /* #7 */
+ 0x1.0p-1073 + 0x1.0p-1074i, /* #8 */
+ 0x1.0p1023 + 0x1.0p1023i, /* #9 */
+ 0x1.0p-343 + 0x1.0p-798i, /* #10 */
+ 0x1.0p0 + 0x3.0p0i, /* #11 */
+ -0x1.0p0 + 0x3.0p0i, /* #12 */
+ 0x1.0p0 - 0x3.0p0i, /* #13 */
+ 0x3.0p0 + 0x1.0p0i, /* #14 */
+ 0x3.0p0 + 0x4.0p0i, /* #15 */
+ -0x2.0p0 + 0x8.0p-10i, /* #16 */
+ 0x1.0p0 + 0x3.0p-20i, /* #17 */
+ 0x1.0p0 + 0x3.0p0i, /* #18 */
+ 0x1.0p0 + 0x3.0p0i, /* #19 */
+ 0x1.0p0 + 0x3.0p0i, /* #20 */
+ 0x1.0p0 + 0x3.0p0i, /* #21 */
+ 0x1.0p0 + 0x3.0p0i, /* #22 */
+ 0x1.0p0 + 0x3.0p0i, /* #23 */
+ 0x1.0p0 + 0x3.0p0i, /* #24 */
+ 0x1.0p0 + 0x3.0p0i, /* #25 */
+ 0x1.0p0 + 0x3.0p0i, /* #26 */
+ 0x1.0p0 + 0x3.0p0i, /* #27 */
+ 0x1.0p0 + 0x3.0p0i, /* #28 */
+ 0x3.0p0 + 0x4.0p0i, /* #29 */
+ 0x3.0p0 - 0x4.0p0i, /* #30 */
+ -0x3.0p0 - 0x4.0p0i, /* #31 */
+ 0x3.0p-20 + 0x1.0p0i, /* #32 */
+ 0x1.0p-80 + 0x1.0p0i, /* #33 */
+ 0x1.0p-80 + 0x1.0p0i, /* #34 */
+ 0x1.0p0 + 0x1.0p-600i, /* #35 */
+ 0x1.0p0 + 0x1.0p-600i, /* #36 */
+ -0x1.0p0 + 0x1.0p-600i, /* #37 */
+ 0x1.0p0 - 0x1.0p-600i, /* #38 */
+ 0x1.0p0 + 0x1.0p-600i, /* #39 */
+ 0x1.0p100 + 0x1.0p-600i, /* #40 */
+ 0x1.97530p100 + 0x1.0p-600i, /* #41 */
+ 0x1.97530p300 + 0x1.0p-600i, /* #42 */
+ 0x1.0p-600 + 0x1.97530p377i, /* #43 */
+ 0x1.0p-500 + 0x1.97530p477i, /* #44 */
+ 0x1.0p-900 + 0x1.97530p0i, /* #45 */
+ 0x1.0p-800 + 0x1.97530p100i, /* #46 */
+ 0x1.0p-700 + 0x1.97530p200i, /* #47 */
+ 0x1.0p-600 + 0x1.97530p300i, /* #48 */
+ 0x1.0p-500 + 0x1.97530p400i, /* #49 */
+ 0x1.0p-400 + 0x1.97530p500i, /* #50 */
+ 0x1.0p-300 + 0x1.97530p600i, /* #51 */
+ 0x1.0p-200 + 0x1.97530p700i, /* #52 */
+ 0x1.0p-100 + 0x1.97530p800i, /* #53 */
+ 0x1.0p-0 + 0x1.97530p900i, /* #54 */
+ 0x1.97530p100 + 0x1.0000p100i, /* #55 */
+ 0x1.97530p50 + 0x1.0000p50i, /* #56 */
+ 0x1.97530p100 + 0x1.0000p50i, /* #57 */
+ 0x1.97530p1 + 0x1.0000p1i, /* #58 */
+ 0x1.97530p1 + 0x1.0000p1i, /* #59 */
+ 0x1.97530p1 + 0x1.0000p1i, /* #60 */
+ 0x1.0p656 + 0x1.0p-730i, /* #61 */
+ 0x1.0p656 + 0x1.0p-730i, /* #62 */
+ 0x1.0p-500 + 0x1.0p-1000i, /* #63 */
+ 0x1.0p0 + 0x1.0p-500i, /* #64 */
+ 0x1.0p-110 + 0x1.0p-500i, /* #65 */
+ 0x1.0p-155 + 0x1.0p-500i, /* #66 */
+ 0x1.0p-156 + 0x1.0p-500i, /* #67 */
+ 0x1.0p-160 + 0x1.0p-500i, /* #68 */
+ 0x1.0p-210 + 0x1.0p-500i, /* #69 */
+ 0x1.0p-310 + 0x1.0p-500i, /* #70 */
+ 0x1.0p-410 + 0x1.0p-500i, /* #71 */
+ 0x1.0p-510 + 0x1.0p-600i, /* #72 */
+ 0x1.0p-610 + 0x1.0p-700i, /* #73 */
+ 0x5.0p1 + 0x12.0p1i, /* #74 */
+ 0x5.0p1 + 0x12.0p1i, /* #75 */
+ 0x5.0p1 + 0x12.0p1i, /* #76 */
+ 0x5.0p1 + 0x12.0p1i, /* #77 */
+ 0x5.0p1 + 0x12.0p1i, /* #78 */
+ 0x5.0p1 + 0x12.0p1i, /* #79 */
+ 0x5.0p1 + 0x12.0p1i, /* #80 */
+ 0x3.1p0 + 0x1.1p0i, /* #81 */
+ -0x3.0p0 + 0x1.1p0i, /* #82 */
+ -0x3.0p0 + 0x1.1p0i, /* #83 */
+ 0x3.0p0 + 0x1.1p0i, /* #84 */
+ 0x3.0p0 + 0x1.1p0i, /* #85 */
+ 0x1.456789p2 - 0x1.789123p1i, /* #86 */
+ 0x1.124569p2 - 0x1.781239p3i, /* #87 */
+ 0x1.123457p3 - 0x1.789126p4i, /* #88 */
+ 0x1.123456p1 + 0x1.891237p4i, /* #89 */
+ 0x1.123456p2 + 0x1.357123p3i, /* #90 */
+ 0x1.123456p3 - 0x1.789123p1i, /* #91 */
+ 0x1.123456p1 - 0x1.789123p4i, /* #92 */
+ 0x1.123456p2 + 0x1.789123p1i, /* #93 */
+ 0x1.123456p3 + 0x1.789123p0i, /* #94 */
+ -0x1.123456p1 - 0x1.789153p-2i, /* #95 */
+ -0x1.123456p2 - 0x1.785123p7i, /* #96 */
+ -0x1.123456p3 + 0x1.789123p9i, /* #97 */
+ 0x1.123456p1 - 0x1.789123p20i, /* #98 */
+ 0x1.123456p2 - 0x1.337788p21i, /* #99 */
+ 0x1.123457p3 - 0x1.789991p3i /* #100 */
+ };
+
+__complex FTYPE z[NUMCNT] =
+ {
+ 0x1.0p-1023 - 0x1.0p-1023i, /* #1 */
+ 0x1.0p1023 + 0x0.0p0i, /* #2 */
+ 0x1.0p346 - 0x1.0p-1008i, /* #3 */
+ 0x1.0p1023 + 0x0.0p0i, /* #4 */
+ 0x1.0p364 - 0x1.0p-1072i, /* #5 */
+ 0x1.0p-1072 + 0x1.0p20i, /* #6 */
+ 3.898125604559113300e289 + 8.174961907852353577e295i, /* #7 */
+ 0.6 + 0.2i, /* #8 */
+ 0.001953125 - 0.001953125i, /* #9 */
+ 1.02951151789360578e-84 + 6.97145987515076231e-220i, /* #10 */
+ 0x1.0p0 + 0x0.0p0i, /* #11 */
+ 0x1.0p0 + 0x0.0p0i, /* #12 */
+ 0x1.0p0 + 0x0.0p0i, /* #13 */
+ 0x1.0p0 + 0x0.0p0i, /* #14 */
+ 0x1.0p0 + 0x0.0p0i, /* #15 */
+ -0x1.fffe0061ff9e0p-2 - 0x1.ff9e0061ff9c0p-10i, /* #16 */
+ 0x1.00000000000000p0 + 0x1.ffffffffee000p-65i, /* #17 */
+ 0x1.0000000000002p0 + 0x1.999999999999ap-54i, /* #18 */
+ 0x1.0000000000003p0 + 0x1.999999999999ap-53i, /* #19 */
+ 0x1.0000000000005p0 + 0x1.999999999999ap-52i, /* #20 */
+ 0x1.000000000000ap0 + 0x1.999999999999ap-51i, /* #21 */
+ 0x1.0000000000013p0 + 0x1.999999999999ap-50i, /* #22 */
+ 0x1.0000000000027p0 + 0x1.999999999999ap-49i, /* #23 */
+ 0x1.000000000004dp0 + 0x1.999999999999ap-48i, /* #24 */
+ 0x1.fffffffffff66p-1 - 0x1.999999999999ap-48i, /* #25 */
+ 0x1.ffffffffffecdp-1 - 0x1.999999999999ap-47i, /* #26 */
+ 0x1.ffffffffff666p-1 - 0x1.999999999999ap-44i, /* #27 */
+ 0x1.fffffffffeccdp-1 - 0x1.999999999999ap-43i, /* #28 */
+ 0x1.6666666666667p0 - 0x1.999999999999ap-3i, /* #29 */
+ 0x0.0p0 + 0x1.0p0i, /* #30 */
+ -0x1.47ae147ae147b00000p-39 - 0x1.0000000001eb8p0i, /* #31 */
+ 0x1.00000000000000p0 - 0x1.ffffffffee000p-65i, /* #32 */
+ 0x1.00000000000000p0 - 0x1.0000000000000p-124i, /* #33 */
+ 0x1.00000000000000p0 + 0x1.0000000000000p-80i, /* #34 */
+ 0x1.00000000000000p0 + 0x1.0000000000000p-644i, /* #35 */
+ -0x1.00000000000000p0 + 0x1.0000000000080p-599i, /* #36 */
+ 0x1.00000000000000p0 - 0x1.0000000000000p-644i, /* #37 */
+ -0x1.00000000000000p0 + 0x1.0000000000000p-644i, /* #38 */
+ 0x1.00000000000000p0 - 0x1.0000000000080p-599i, /* #39 */
+ 0x1.00000000000000p0 - 0x1.0000000000080p-699i, /* #40 */
+ 0x1.00000000000000p0 - 0x1.41c9b303bfbf2p-700i, /* #41 */
+ 0x1.00000000000000p0 - 0x1.41c9b303bfbf2p-900i, /* #42 */
+ -0x1.41c9b303bfb510p-1022 - 0x1.0000000000000p0i, /* #43 */
+ -0x1.41c9b303bfb510p-1022 - 0x1.0000000000000p0i, /* #44 */
+ -0x1.41c9b303bfb510p-945 - 0x1.0000000000000p0i, /* #45 */
+ -0x1.41c9b303bfb510p-945 - 0x1.0000000000000p0i, /* #46 */
+ -0x1.41c9b303bfb510p-945 - 0x1.0000000000000p0i, /* #47 */
+ -0x1.41c9b303bfb510p-945 - 0x1.0000000000000p0i, /* #48 */
+ -0x1.41c9b303bfb510p-945 - 0x1.0000000000000p0i, /* #49 */
+ -0x1.41c9b303bfb510p-945 - 0x1.0000000000000p0i, /* #50 */
+ -0x1.41c9b303bfb510p-945 - 0x1.0000000000000p0i, /* #51 */
+ -0x1.41c9b303bfb510p-945 - 0x1.0000000000000p0i, /* #52 */
+ -0x1.41c9b303bfb510p-945 - 0x1.0000000000000p0i, /* #53 */
+ -0x1.41c9b303bfb510p-945 - 0x1.0000000000000p0i, /* #54 */
+ 0x1.6f0647208a31a0p899 - 0x1.cd580bc4697cap898i, /* #55 */
+ 0x1.6f0647208a31a0p959 - 0x1.cd580bc4697cap958i, /* #56 */
+ 0x1.00000000000000p700 - 0x1.41c9b303bfb51p649i, /* #57 */
+ 0x1.6f0647208a31a0p698 - 0x1.cd580bc4697cap697i, /* #58 */
+ 0x1.00000000000000p599 + 0x0.0000000000000p0i, /* #59 */
+ 0x1.00000000000000p519 + 0x0.0000000000000p0i, /* #60 */
+ 0x1.0p364 - 0x1.0p-1022i, /* #61 */
+ 0x1.0p264 + 0x0.0p0i, /* #62 */
+ 0x1.0p1004 + 0x1.0p1023i, /* #63 */
+ 0x1.0p1004 - 0x1.0p504i, /* #64 */
+ 0x1.0p1020 - 0x1.0p630i, /* #65 */
+ 0x1.0p1020 - 0x1.0p675i, /* #66 */
+ 0x1.0p1020 - 0x1.0p676i, /* #67 */
+ 0x1.0p1020 - 0x1.0p680i, /* #68 */
+ 0x1.0p1020 - 0x1.0p730i, /* #69 */
+ 0x1.0p1020 - 0x1.0p830i, /* #70 */
+ 0x1.0p1020 - 0x1.0p930i, /* #71 */
+ 0x1.0p1020 - 0x1.0p930i, /* #72 */
+ 0x1.0p1020 - 0x1.0p930i, /* #73 */
+ 0x1.16f21023358c2p1 - 0x1.f5b3b6a5c6c90p2i, /* #74 */
+ 0x1.408cd63069a0ap1 - 0x1.6a5c6c8fc5517p0i, /* #75 */
+ 0x1.4b8d91f8aa2d8p1 - 0x1.ee6539f2cbeb7p2i, /* #76 */
+ 0x1.0bc8408cd6307p1 - 0x1.daceda971b23fp2i, /* #77 */
+ 0x1.e2a8b5e9fe887p-1 + 0x1.a682913ce1ecfp-3i, /* #78 */
+ 0x1.c3d9db52e3648p-2 + 0x1.77908119ac60dp-7i, /* #79 */
+ 0x1.16bd3fd10defep-3 - 0x1.f5bb0c784c496p-2i, /* #80 */
+ 0x1.2b9c43596635bp10 - 0x1.9fc933bd0b3adp8i, /* #81 */
+ 0x1.3079a1638e442p10 + 0x1.af56ff5f5ee08p8i, /* #82 */
+ -0x1.3079a23d4567cp10 - 0x1.af56f5c477a85p8i, /* #83 */
+ -0x1.3079a23d4567cp10 + 0x1.af56f5c477a85p8i, /* #84 */
+ 0x1.3079a1638e442p10 - 0x1.af56ff5f5ee08p8i, /* #85 */
+ 0x1.a27419691d785p+1 - 0x1.5e60a434afdfep1i, /* #86 */
+ 0x1.004a6235052b9p1 - 0x1.077970d2017e9p-10i, /* #87 */
+ -0x1.8825f329396f0p-1 + 0x1.492fb9aef1c35p-1i, /* #88 */
+ 0x1.f6417093502e6p-1 - 0x1.0d936b36d2386p-2i, /* #89 */
+ 0x1.2e6b76d3c1a74p1 + 0x1.4911f033da9e4p-3i, /* #90 */
+ 0x1.a1ced84e145e9p-5 + 0x1.61ced4d722d38p1i, /* #91 */
+ 0x1.064f7bc3e4834p0 + 0x1.1551c3ae74bd1p-2i, /* #92 */
+ -0x1.344545d341aa8p0 - 0x1.2aa5da272dd3dp2i, /* #93 */
+ -0x1.06d98474fe895p-1 + 0x1.6ad8d7df1b0c8p1i, /* #94 */
+ -0x1.6deb5a7bec317p2 - 0x1.4028b8d0a2fc1p3i, /* #95 */
+ 0x1.fbd4560086546p-4 + 0x1.8c3278a9ca9b4p-5i, /* #96 */
+ -0x1.0106f72f51798p-5 - 0x1.69200e9aa701dp-7i, /* #97 */
+ -0x1.00000929d9956p-16 - 0x1.74d2319d42342p-18i, /* #98 */
+ -0x1.39887db89b686p-17 + 0x1.c89cdfee34a14p-19i, /* #99 */
+ 0x1.a746a452d3430p0 - 0x1.e72d9f35e28e6p-2i /* #100 */
+ };
+
+
+__complex FTYPE errmax[NUMCNT] =
+ {
+ 0x0.0000000000000p0 + 0x0.0000000000000p0i, /* #1 */
+ 0x0.0000000000001p1023 + 0x0.0000000000001p0i, /* #2 */
+ 0x0.0000000000001p346 + 0x0.0000000000001p-1008i, /* #3 */
+ 0x0.0000000000001p1023 + 0x0.0000000000001p0i, /* #4 */
+ 0x0.0000000000001p364 + 0x0.0000000000000p0i, /* #5 */
+ 0x0.0000000000000p0 + 0x0.0000000000001p20i, /* #6 */
+ 0x0.0000000000001p961 + 0x0.0000000000001p982i, /* #7 */
+ 0x0.0000000000001p-1 + 0x0.0000000000010p-3i, /* #8 */
+ 0x0.0000000000001p-9 + 0x0.0000000000001p-9i, /* #9 */
+ 0x0.0000000000001p279 + 0x0.0000000000001p-171i, /* #10 */
+ 0x0.0000000000001p0 + 0x0.0000000000001p0i, /* #11 */
+ 0x0.0000000000001p0 + 0x0.000000000001p0i, /* #12 */
+ 0x0.0000000000001p0 + 0x0.000000000001p0i, /* #13 */
+ 0x0.0000000000001p0 + 0x0.000000000001p0i, /* #14 */
+ 0x0.0000000000001p0 + 0x0.000000000001p0i, /* #15 */
+ 0x1.0000000000001p-2 + 0x0.000000000001p-10i, /* #16 */
+ 0x0.0000000000001p0 + 0x0.000000000001p-65i, /* #17 */
+ 0x0.0000000000001p0 + 0x0.000000000001p-54i, /* #18 */
+ 0x0.0000000000001p0 + 0x0.000000000001p-53i, /* #19 */
+ 0x0.0000000000001p0 + 0x0.000000000001p-52i, /* #20 */
+ 0x0.0000000000001p0 + 0x0.000000000001p-51i, /* #21 */
+ 0x0.0000000000001p0 + 0x0.000000000001p-50i, /* #22 */
+ 0x0.0000000000001p0 + 0x0.000000000001p-49i, /* #23 */
+ 0x0.0000000000001p0 + 0x0.000000000001p-48i, /* #24 */
+ 0x0.0000000000001p-1 + 0x0.000000000001p-48i, /* #25 */
+ 0x0.0000000000001p-1 + 0x0.000000000001p-47i, /* #26 */
+ 0x0.0000000000001p-1 + 0x0.000000000001p-44i, /* #27 */
+ 0x0.0000000000001p-1 + 0x0.000000000001p-43i, /* #28 */
+ 0x0.0000000000001p0 + 0x0.000000000001p-3i, /* #29 */
+ 0x0.0000000000001p0 + 0x0.000000000001p0i, /* #30 */
+ 0x0.0000000000001p-39 + 0x0.000000000001p0i, /* #31 */
+ 0x0.0000000000001p0 + 0x0.000000000001p-65i, /* #32 */
+ 0x0.0000000000001p0 + 0x0.000000000001p-124i, /* #33 */
+ 0x0.0000000000001p0 + 0x0.000000000001p-80i, /* #34 */
+ 0x0.0000000000001p0 + 0x0.000000000001p-644i, /* #35 */
+ 0x0.0000000000001p0 + 0x0.000000000001p-599i, /* #36 */
+ 0x0.0000000000001p0 + 0x0.000000000001p-644i, /* #37 */
+ 0x0.0000000000001p0 + 0x0.000000000001p-644i, /* #38 */
+ 0x0.0000000000001p0 + 0x0.000000000001p-599i, /* #39 */
+ 0x0.0000000000001p0 + 0x0.000000000001p-699i, /* #40 */
+ 0x0.0000000000001p0 + 0x0.000000000001p-700i, /* #41 */
+ 0x0.0000000000001p0 + 0x0.000000000001p-900i, /* #42 */
+ 0x0.0042000000000p-1022 + 0x0.000000000001p0i, /* #43 */
+ 0x0.0042000000000p-1022 + 0x0.000000000001p0i, /* #44 */
+ 0x0.0042000000001p-945 + 0x0.000000000001p0i, /* #45 */
+ 0x0.0042000000001p-945 + 0x0.000000000001p0i, /* #46 */
+ 0x0.0042000000001p-945 + 0x0.000000000001p0i, /* #47 */
+ 0x0.0042000000001p-945 + 0x0.000000000001p0i, /* #48 */
+ 0x0.0042000000001p-945 + 0x0.000000000001p0i, /* #49 */
+ 0x0.0042000000001p-945 + 0x0.000000000001p0i, /* #50 */
+ 0x0.0042000000001p-945 + 0x0.000000000001p0i, /* #51 */
+ 0x0.0042000000001p-945 + 0x0.000000000001p0i, /* #52 */
+ 0x0.0042000000001p-945 + 0x0.000000000001p0i, /* #53 */
+ 0x0.0042000000001p-945 + 0x0.000000000001p0i, /* #54 */
+ 0x0.0000000000001p899 + 0x0.000000000001p898i, /* #55 */
+ 0x0.0000000000001p959 + 0x0.000000000001p958i, /* #56 */
+ 0x0.0000000000001p700 + 0x0.000000000001p649i, /* #57 */
+ 0x0.0000000000001p698 + 0x0.000000000001p697i, /* #58 */
+ 0x0.0000000000001p599 + 0x0.000000000001p0i, /* #59 */
+ 0x0.0000000000001p519 + 0x0.000000000001p0i, /* #60 */
+ 0x0.0000000000001p364 + 0x0.000000000000p0i, /* #61 */
+ 0x0.0000000000001p264 + 0x0.000000000001p0i, /* #62 */
+ 0x0.0000000000001p1004 + 0x0.000000000001p1023i, /* #63 */
+ 0x0.0000000000001p1004 + 0x0.000000000001p504i, /* #64 */
+ 0x0.0000000000001p1020 + 0x0.000000000001p630i, /* #65 */
+ 0x0.0000000000001p1020 + 0x0.000000000001p675i, /* #66 */
+ 0x0.0000000000001p1020 + 0x0.000000000001p676i, /* #67 */
+ 0x0.0000000000001p1020 + 0x0.000000000001p680i, /* #68 */
+ 0x0.0000000000001p1020 + 0x0.000000000001p730i, /* #69 */
+ 0x0.0000000000001p1020 + 0x0.000000000001p830i, /* #70 */
+ 0x0.0000000000001p1020 + 0x0.000000000001p930i, /* #71 */
+ 0x0.0000000000001p1020 + 0x0.000000000001p930i, /* #72 */
+ 0x0.0000000000001p1020 + 0x0.000000000001p930i, /* #73 */
+ 0x0.0000000000001p7 + 0x0.000000000001p0i, /* #74 */
+ 0x0.0000000000001p1 + 0x0.000000000001p0i, /* #75 */
+ 0x0.0000000000001p1 + 0x0.000000000001p2i, /* #76 */
+ 0x0.0000000000001p1 + 0x0.000000000001p2i, /* #77 */
+ 0x0.0000000000001p-1 + 0x0.000000000001p-3i, /* #78 */
+ 0x0.0000000000001p-2 + 0x0.000000000001p-7i, /* #79 */
+ 0x0.0000000000001p-3 + 0x0.000000000001p-2i, /* #80 */
+ 0x0.0000000000001p10 + 0x0.000000000001p8i, /* #81 */
+ 0x0.0000000000001p10 + 0x0.000000000001p8i, /* #82 */
+ 0x0.0000000000001p10 + 0x0.000000000001p8i, /* #83 */
+ 0x0.0000000000001p10 + 0x0.000000000001p8i, /* #84 */
+ 0x0.0000000000001p10 + 0x0.000000000001p8i, /* #85 */
+ 0x0.0000000000001p1 + 0x0.000000000001p1i, /* #86 */
+ 0x0.0000000000001p1 + 0x0.000000000001p-10i, /* #87 */
+ 0x0.0000000000001p-1 + 0x0.000000000001p-1i, /* #88 */
+ 0x0.0000000000001p-1 + 0x0.000000000001p-2i, /* #89 */
+ 0x0.0000000000001p1 + 0x0.000000000001p-3i, /* #90 */
+ 0x0.0000000000005p-5 + 0x0.000000000001p1i, /* #91 */
+ 0x0.0000000000001p0 + 0x0.000000000001p-2i, /* #92 */
+ 0x0.0000000000001p0 + 0x0.000000000001p2i, /* #93 */
+ 0x0.0000000000001p-1 + 0x0.000000000001p1i, /* #94 */
+ 0x0.0000000000001p2 + 0x0.000000000001p3i, /* #95 */
+ 0x0.0000000000001p-4 + 0x0.000000000001p-5i, /* #96 */
+ 0x0.0000000000001p-5 + 0x0.000000000001p-7i, /* #97 */
+ 0x0.0000000000001p-16 + 0x0.000000000001p-18i, /* #98 */
+ 0x0.0000000000001p-17 + 0x0.000000000001p-19i, /* #99 */
+ 0x0.0000000000001p0 + 0x0.000000000001p-2i /* #100 */
+ };
+
+
+int main(int argc, char** argv)
+{
+ int i;
+ FTYPE xr, xi, yr, yi, zr, zi, zzr, zzi;
+ FTYPE er, ei;
+ __complex FTYPE ans[NUMCNT];
+ int errcnt;
+
+ errcnt = 0;
+ for (i = 0; i < NUMCNT; i++)
+ {
+ ans[i] = x[i] / y[i];
+ if( z[i] != z[i] ) /* Check for nan/inf case */
+ {
+ zr = __real__ z[i];
+ zi = __imag__ z[i];
+ zzr = __real__ ans[i];
+ zzi = __imag__ ans[i];
+ er = __real__ errmax[i];
+ ei = __imag__ errmax[i];
+ errcnt++;
+ printf("x %3d " FMT " " FMT "i\n",
+ i + 1, __real__ x[i], __imag__ x[i]);
+ printf ("y %3d " FMT " " FMT "i\n",
+ i + 1, __real__ y[i], __imag__ y[i]);
+ printf("expected " FMT " " FMT "i\n",
+ __real__ z[i], __imag__ z[i]);
+ printf("actual " FMT " " FMT "i /* #%d */ FAIL\n",
+ __real__ ans[i], __imag__ ans[i], i + 1);
+ printf("diff " FMT " " FMT "i\n",
+ zr - zzr, zi - zzi);
+ printf("errmax " FMT " " FMT "i\n\n",
+ er, ei);
+ }
+ else
+ {
+ if( z[i] != ans[i] )
+ {
+ zr = __real__ z[i];
+ zi = __imag__ z[i];
+ zzr = __real__ ans[i];
+ zzi = __imag__ ans[i];
+ er = __real__ errmax[i];
+ ei = __imag__ errmax[i];
+ if( (FABS(zr-zzr) > er) || (FABS(zi-zzi) > ei))
+ { /* report if error exceeds error max */
+ errcnt++;
+ printf("x %3d " FMT " " FMT "i\n",
+ i + 1, __real__ x[i], __imag__ x[i]);
+ printf ("y %3d " FMT " " FMT "i\n",
+ i + 1, __real__ y[i], __imag__ y[i]);
+ printf("expected " FMT " " FMT "i\n",
+ __real__ z[i], __imag__ z[i]);
+ printf("actual " FMT " " FMT "i /* #%d */ FAIL\n",
+ __real__ ans[i], __imag__ ans[i], i + 1);
+ printf("diff " FMT " " FMT "i\n",
+ zr - zzr, zi - zzi);
+ printf("errmax " FMT " " FMT "i\n\n",
+ er, ei);
+ }
+ }
+ }
+ }
+ if( errcnt > 0)
+ {
+ printf("%2d Failures\n",errcnt);
+ abort();
+ }
+ printf("PASS\n");
+ return 0;
+}
+
new file mode 100644
@@ -0,0 +1,13 @@
+#ifndef SFP_MACHINE_H
+#define SFP_MACHINE_H
+
+#define _FP_W_TYPE_SIZE 64
+#define _FP_W_TYPE unsigned long long
+#define _FP_WS_TYPE signed long long
+#define _FP_I_TYPE long long
+
+#define __LITTLE_ENDIAN 1234
+#define __BIG_ENDIAN 4321
+#define __BYTE_ORDER __BIG_ENDIAN
+
+#endif
@@ -29,6 +29,41 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "tm.h"
#include "libgcc_tm.h"
+#if defined(L_divsc3) && defined(__LIBGCC_HAS_SF_MODE__)
+#include "soft-fp/soft-fp.h"
+#include "soft-fp/single.h"
+typedef union _FP_UNION_S FP_UTYPE;
+#define FP_EXPBIAS _FP_EXPBIAS_S
+#endif
+
+#if defined(L_divdc3) && defined(__LIBGCC_HAS_DF_MODE__)
+#include "soft-fp/soft-fp.h"
+#include "soft-fp/double.h"
+typedef union _FP_UNION_D FP_UTYPE;
+#define FP_EXPBIAS _FP_EXPBIAS_D
+#endif
+
+#if defined(L_divhc3) && defined(__LIBGCC_HAS_HF_MODE__)
+#include "soft-fp/soft-fp.h"
+#include "soft-fp/half.h"
+typedef union _FP_UNION_H FP_UTYPE;
+#define FP_EXPBIAS _FP_EXPBIAS_H
+#endif
+
+#if defined(L_divxc3) && defined(__LIBGCC_HAS_XF_MODE__)
+#include "soft-fp/soft-fp.h"
+#include "soft-fp/extended.h"
+typedef union _FP_UNION_E FP_UTYPE;
+#define FP_EXPBIAS _FP_EXPBIAS_E
+#endif
+
+#if defined(L_divtc3) && defined(__LIBGCC_HAS_TF_MODE__)
+#include "soft-fp/soft-fp.h"
+#include "soft-fp/quad.h"
+typedef union _FP_UNION_Q FP_UTYPE;
+#define FP_EXPBIAS _FP_EXPBIAS_Q
+#endif
+
#ifdef HAVE_GAS_HIDDEN
#define ATTRIBUTE_HIDDEN __attribute__ ((__visibility__ ("hidden")))
#else
@@ -2039,30 +2074,158 @@ CONCAT3(__mul,MODE,3) (MTYPE a, MTYPE b, MTYPE c, MTYPE d)
#if defined(L_divhc3) || defined(L_divsc3) || defined(L_divdc3) \
|| defined(L_divxc3) || defined(L_divtc3)
+#if defined(FP_EXPBIAS)
+#undef int
+
+/* Return an exponent of d */
+static inline MTYPE fp_exp(MTYPE d)
+{
+ FP_UTYPE u;
+ u.flt = d;
+ return u.bits.exp - FP_EXPBIAS;
+}
+
+/* Return pow(2.0, n) */
+static inline MTYPE fp_pow2(int n)
+{
+ FP_UTYPE u, u1;
+ u.flt = 1.;
+ if (n > -FP_EXPBIAS)
+ {
+ u.bits.exp = n + FP_EXPBIAS;
+ return u.flt;
+ }
+ u.bits.exp = 1;
+ u1.flt = 1.;
+ u1.bits.exp = n - 1 + 2 * FP_EXPBIAS;
+ return u.flt * u1.flt;
+}
+
+static inline int get_cde(int c, int d)
+{
+ int maxe = c, mine = d;
+ if (c < d)
+ {
+ maxe = d;
+ mine = c;
+ }
+ if (maxe > FP_EXPBIAS / 2)
+ {
+ if (mine - maxe > -FP_EXPBIAS)
+ return maxe;
+ if (maxe - FP_EXPBIAS / 2 >= mine - maxe + FP_EXPBIAS)
+ return maxe - FP_EXPBIAS / 2;
+ return mine - maxe + FP_EXPBIAS;
+ }
+ if (-mine > FP_EXPBIAS / 2)
+ return mine + FP_EXPBIAS <= maxe ? mine + FP_EXPBIAS : maxe;
+ return 0;
+}
+
+static inline int get_abe(int e1, int e2)
+{
+ int maxe = e1, mine = e2;
+ if (e1 < e2)
+ {
+ maxe = e2;
+ mine = e1;
+ }
+ if (maxe >= FP_EXPBIAS)
+ return maxe - FP_EXPBIAS + 1;
+ if (mine <= -FP_EXPBIAS)
+ {
+ if (maxe < 0)
+ return maxe;
+ return FP_EXPBIAS - 1 - maxe;
+ }
+ return 0;
+}
+#endif /* FP_EXPBIAS */
+
CTYPE
CONCAT3(__div,MODE,3) (MTYPE a, MTYPE b, MTYPE c, MTYPE d)
{
MTYPE denom, ratio, x, y;
CTYPE res;
- /* ??? We can get better behavior from logarithmic scaling instead of
- the division. But that would mean starting to link libgcc against
- libm. We could implement something akin to ldexp/frexp as gcc builtins
- fairly easily... */
+#if defined(FP_EXPBIAS)
+ /* By scaling the calculation with powers of 2.0 we can avoid any roundoff
+ errors.
+ 1. Convert (a+bi)/(c+di) to ((a+bi)/((c/x)+(d/x)i))*(1.0/x), where
+ x is any power of 2, such that neither (c/x)**2 nor (d/x)**2 cause
+ an overflow. Try to avoid underflow in c/x and d/x.
+ 2) Callculate a real part as
+ ((a/y)*(c/x)+(b/y)*(d/x)) / ((c/x)**2+(y/x)**2) * (y/x), where
+ y is any power of 2, such that neither (a/y)*(c/x) nor (b/y)*(d/x) cause
+ an overflow. Try to avoid underflow in a/y and b/y.
+ 3) Callculate an imaginary part as
+ ((b/y)*(c/x)-(a/y)*(d/x)) / ((c/x)**2 + (y/x)**2) * (y/x), where
+ y is any power of 2, such that neither (b/y)*(c/x) nor (a/y)*(d/x) cause
+ an overflow. Try to avoid underflow in a/y and b/y. */
+
+ int ae, be, ce, de, abe, cde;
+ ae = fp_exp (a);
+ be = fp_exp (b);
+ ce = fp_exp (c);
+ de = fp_exp (d);
+ cde = get_cde (ce, de);
+ if (cde != 0) {
+ ratio = fp_pow2 (-cde);
+ c *= ratio;
+ d *= ratio;
+ ce -= cde;
+ de -= cde;
+ }
+ denom = c * c + d * d;
+
+ // Calculate a real part
+ abe = get_abe (ae + ce, be + de);
+ if (abe != 0)
+ {
+ MTYPE a1, b1;
+ ratio = fp_pow2 (-abe);
+ a1 = a * ratio;
+ b1 = b * ratio;
+ x = a1 * c + b1 * d;
+ }
+ else
+ x = a * c + b * d;
+ x /= denom;
+ if (abe - cde != 0)
+ x *= fp_pow2(abe - cde);
+
+ // Calculate an imaginary part
+ abe = get_abe (be + ce, ae + de);
+ if (abe != 0)
+ {
+ MTYPE a1, b1;
+ ratio = fp_pow2 (-abe);
+ a1 = a * ratio;
+ b1 = b * ratio;
+ y = b1 * c - a1 * d;
+ }
+ else
+ y = b * c - a * d;
+ y /= denom;
+ if (abe - cde != 0)
+ y *= fp_pow2(abe - cde);
+
+#else
if (FABS (c) < FABS (d))
{
ratio = c / d;
denom = (c * ratio) + d;
x = ((a * ratio) + b) / denom;
y = ((b * ratio) - a) / denom;
- }
- else
+ }
+ else
{
ratio = d / c;
denom = (d * ratio) + c;
x = ((b * ratio) + a) / denom;
y = (b - (a * ratio)) / denom;
}
+#endif
/* Recover infinities and zeros that computed as NaN+iNaN; the only cases
are nonzero/zero, infinite/finite, and finite/infinite. */
From: Vladimir Mezentsev <vladimir.mezentsev@oracle.com> Tested on aarch64-linux-gnu, x86_64-pc-linux-gnu and sparc64-unknown-linux-gnu. No regression. New tests now passed. There is a performance degradation for complex double type: failed cases | time old new | old new complex-32 15 0 | 3.51 3.56 complex-64 19 0 | 1.88 2.34 complex-128 34 0 | 3.71 2.88 ChangeLog: 2018-01-25 Vladimir Mezentsev <vladimir.mezentsev@oracle.com> PR libgcc/59714 * libgcc/libgcc2.c: New complex division implementation * libgcc/config/sparc/sfp-machine.h: New * gcc/testsuite/gcc.c-torture/execute/pr59714_128.c: New test * gcc/testsuite/gcc.c-torture/execute/pr59714_32.c: New test * gcc/testsuite/gcc.c-torture/execute/pr59714_64.c: New test --- gcc/testsuite/gcc.c-torture/execute/pr59714_128.c | 506 ++++++++++++++++++++++ gcc/testsuite/gcc.c-torture/execute/pr59714_32.c | 506 ++++++++++++++++++++++ gcc/testsuite/gcc.c-torture/execute/pr59714_64.c | 506 ++++++++++++++++++++++ libgcc/config/sparc/sfp-machine.h | 13 + libgcc/libgcc2.c | 175 +++++++- 5 files changed, 1700 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gcc.c-torture/execute/pr59714_128.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/pr59714_32.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/pr59714_64.c create mode 100644 libgcc/config/sparc/sfp-machine.h