annotate test/compiler/8005956/PolynomialRoot.java @ 20543:e7d0505c8a30

8059758: Footprint regressions with JDK-8038423 Summary: Changes in JDK-8038423 always initialize (zero out) virtual memory used for auxiliary data structures. This causes a footprint regression for G1 in startup benchmarks. This is because they do not touch that memory at all, so the operating system does not actually commit these pages. The fix is to, if the initialization value of the data structures matches the default value of just committed memory (=0), do not do anything. Reviewed-by: jwilhelm, brutisso
author tschatzl
date Fri, 10 Oct 2014 15:51:58 +0200
parents e554162ab094
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11045
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
1 //package com.polytechnik.utils;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
2 /*
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
3 * (C) Vladislav Malyshkin 2010
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
4 * This file is under GPL version 3.
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
5 *
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
6 */
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
7
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
8 /** Polynomial root.
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
9 * @version $Id: PolynomialRoot.java,v 1.105 2012/08/18 00:00:05 mal Exp $
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
10 * @author Vladislav Malyshkin mal@gromco.com
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
11 */
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
12
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
13 /**
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
14 * @test
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
15 * @bug 8005956
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
16 * @summary C2: assert(!def_outside->member(r)) failed: Use of external LRG overlaps the same LRG defined in this block
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
17 *
11107
e554162ab094 8019625: Test compiler/8005956/PolynomialRoot.java timeouts on Solaris SPARCs
adlertz
parents: 11045
diff changeset
18 * @run main/timeout=300 PolynomialRoot
11045
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
19 */
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
20
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
21 public class PolynomialRoot {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
22
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
23
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
24 public static int findPolynomialRoots(final int n,
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
25 final double [] p,
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
26 final double [] re_root,
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
27 final double [] im_root)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
28 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
29 if(n==4)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
30 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
31 return root4(p,re_root,im_root);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
32 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
33 else if(n==3)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
34 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
35 return root3(p,re_root,im_root);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
36 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
37 else if(n==2)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
38 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
39 return root2(p,re_root,im_root);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
40 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
41 else if(n==1)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
42 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
43 return root1(p,re_root,im_root);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
44 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
45 else
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
46 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
47 throw new RuntimeException("n="+n+" is not supported yet");
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
48 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
49 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
50
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
51
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
52
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
53 static final double SQRT3=Math.sqrt(3.0),SQRT2=Math.sqrt(2.0);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
54
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
55
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
56 private static final boolean PRINT_DEBUG=false;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
57
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
58 public static int root4(final double [] p,final double [] re_root,final double [] im_root)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
59 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
60 if(PRINT_DEBUG) System.err.println("=====================root4:p="+java.util.Arrays.toString(p));
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
61 final double vs=p[4];
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
62 if(PRINT_DEBUG) System.err.println("p[4]="+p[4]);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
63 if(!(Math.abs(vs)>EPS))
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
64 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
65 re_root[0]=re_root[1]=re_root[2]=re_root[3]=
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
66 im_root[0]=im_root[1]=im_root[2]=im_root[3]=Double.NaN;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
67 return -1;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
68 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
69
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
70 /* zsolve_quartic.c - finds the complex roots of
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
71 * x^4 + a x^3 + b x^2 + c x + d = 0
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
72 */
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
73 final double a=p[3]/vs,b=p[2]/vs,c=p[1]/vs,d=p[0]/vs;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
74 if(PRINT_DEBUG) System.err.println("input a="+a+" b="+b+" c="+c+" d="+d);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
75
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
76
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
77 final double r4 = 1.0 / 4.0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
78 final double q2 = 1.0 / 2.0, q4 = 1.0 / 4.0, q8 = 1.0 / 8.0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
79 final double q1 = 3.0 / 8.0, q3 = 3.0 / 16.0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
80 final int mt;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
81
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
82 /* Deal easily with the cases where the quartic is degenerate. The
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
83 * ordering of solutions is done explicitly. */
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
84 if (0 == b && 0 == c)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
85 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
86 if (0 == d)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
87 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
88 re_root[0]=-a;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
89 im_root[0]=im_root[1]=im_root[2]=im_root[3]=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
90 re_root[1]=re_root[2]=re_root[3]=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
91 return 4;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
92 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
93 else if (0 == a)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
94 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
95 if (d > 0)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
96 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
97 final double sq4 = Math.sqrt(Math.sqrt(d));
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
98 re_root[0]=sq4*SQRT2/2;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
99 im_root[0]=re_root[0];
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
100 re_root[1]=-re_root[0];
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
101 im_root[1]=re_root[0];
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
102 re_root[2]=-re_root[0];
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
103 im_root[2]=-re_root[0];
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
104 re_root[3]=re_root[0];
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
105 im_root[3]=-re_root[0];
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
106 if(PRINT_DEBUG) System.err.println("Path a=0 d>0");
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
107 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
108 else
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
109 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
110 final double sq4 = Math.sqrt(Math.sqrt(-d));
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
111 re_root[0]=sq4;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
112 im_root[0]=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
113 re_root[1]=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
114 im_root[1]=sq4;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
115 re_root[2]=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
116 im_root[2]=-sq4;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
117 re_root[3]=-sq4;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
118 im_root[3]=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
119 if(PRINT_DEBUG) System.err.println("Path a=0 d<0");
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
120 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
121 return 4;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
122 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
123 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
124
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
125 if (0.0 == c && 0.0 == d)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
126 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
127 root2(new double []{p[2],p[3],p[4]},re_root,im_root);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
128 re_root[2]=im_root[2]=re_root[3]=im_root[3]=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
129 return 4;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
130 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
131
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
132 if(PRINT_DEBUG) System.err.println("G Path c="+c+" d="+d);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
133 final double [] u=new double[3];
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
134
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
135 if(PRINT_DEBUG) System.err.println("Generic Path");
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
136 /* For non-degenerate solutions, proceed by constructing and
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
137 * solving the resolvent cubic */
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
138 final double aa = a * a;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
139 final double pp = b - q1 * aa;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
140 final double qq = c - q2 * a * (b - q4 * aa);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
141 final double rr = d - q4 * a * (c - q4 * a * (b - q3 * aa));
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
142 final double rc = q2 * pp , rc3 = rc / 3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
143 final double sc = q4 * (q4 * pp * pp - rr);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
144 final double tc = -(q8 * qq * q8 * qq);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
145 if(PRINT_DEBUG) System.err.println("aa="+aa+" pp="+pp+" qq="+qq+" rr="+rr+" rc="+rc+" sc="+sc+" tc="+tc);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
146 final boolean flag_realroots;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
147
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
148 /* This code solves the resolvent cubic in a convenient fashion
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
149 * for this implementation of the quartic. If there are three real
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
150 * roots, then they are placed directly into u[]. If two are
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
151 * complex, then the real root is put into u[0] and the real
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
152 * and imaginary part of the complex roots are placed into
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
153 * u[1] and u[2], respectively. */
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
154 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
155 final double qcub = (rc * rc - 3 * sc);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
156 final double rcub = (rc*(2 * rc * rc - 9 * sc) + 27 * tc);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
157
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
158 final double Q = qcub / 9;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
159 final double R = rcub / 54;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
160
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
161 final double Q3 = Q * Q * Q;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
162 final double R2 = R * R;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
163
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
164 final double CR2 = 729 * rcub * rcub;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
165 final double CQ3 = 2916 * qcub * qcub * qcub;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
166
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
167 if(PRINT_DEBUG) System.err.println("CR2="+CR2+" CQ3="+CQ3+" R="+R+" Q="+Q);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
168
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
169 if (0 == R && 0 == Q)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
170 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
171 flag_realroots=true;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
172 u[0] = -rc3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
173 u[1] = -rc3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
174 u[2] = -rc3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
175 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
176 else if (CR2 == CQ3)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
177 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
178 flag_realroots=true;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
179 final double sqrtQ = Math.sqrt (Q);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
180 if (R > 0)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
181 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
182 u[0] = -2 * sqrtQ - rc3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
183 u[1] = sqrtQ - rc3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
184 u[2] = sqrtQ - rc3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
185 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
186 else
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
187 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
188 u[0] = -sqrtQ - rc3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
189 u[1] = -sqrtQ - rc3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
190 u[2] = 2 * sqrtQ - rc3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
191 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
192 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
193 else if (R2 < Q3)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
194 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
195 flag_realroots=true;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
196 final double ratio = (R >= 0?1:-1) * Math.sqrt (R2 / Q3);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
197 final double theta = Math.acos (ratio);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
198 final double norm = -2 * Math.sqrt (Q);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
199
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
200 u[0] = norm * Math.cos (theta / 3) - rc3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
201 u[1] = norm * Math.cos ((theta + 2.0 * Math.PI) / 3) - rc3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
202 u[2] = norm * Math.cos ((theta - 2.0 * Math.PI) / 3) - rc3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
203 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
204 else
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
205 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
206 flag_realroots=false;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
207 final double A = -(R >= 0?1:-1)*Math.pow(Math.abs(R)+Math.sqrt(R2-Q3),1.0/3.0);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
208 final double B = Q / A;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
209
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
210 u[0] = A + B - rc3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
211 u[1] = -0.5 * (A + B) - rc3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
212 u[2] = -(SQRT3*0.5) * Math.abs (A - B);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
213 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
214 if(PRINT_DEBUG) System.err.println("u[0]="+u[0]+" u[1]="+u[1]+" u[2]="+u[2]+" qq="+qq+" disc="+((CR2 - CQ3) / 2125764.0));
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
215 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
216 /* End of solution to resolvent cubic */
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
217
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
218 /* Combine the square roots of the roots of the cubic
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
219 * resolvent appropriately. Also, calculate 'mt' which
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
220 * designates the nature of the roots:
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
221 * mt=1 : 4 real roots
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
222 * mt=2 : 0 real roots
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
223 * mt=3 : 2 real roots
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
224 */
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
225
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
226
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
227 final double w1_re,w1_im,w2_re,w2_im,w3_re,w3_im,mod_w1w2,mod_w1w2_squared;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
228 if (flag_realroots)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
229 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
230 mod_w1w2=-1;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
231 mt = 2;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
232 int jmin=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
233 double vmin=Math.abs(u[jmin]);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
234 for(int j=1;j<3;j++)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
235 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
236 final double vx=Math.abs(u[j]);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
237 if(vx<vmin)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
238 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
239 vmin=vx;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
240 jmin=j;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
241 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
242 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
243 final double u1=u[(jmin+1)%3],u2=u[(jmin+2)%3];
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
244 mod_w1w2_squared=Math.abs(u1*u2);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
245 if(u1>=0)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
246 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
247 w1_re=Math.sqrt(u1);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
248 w1_im=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
249 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
250 else
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
251 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
252 w1_re=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
253 w1_im=Math.sqrt(-u1);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
254 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
255 if(u2>=0)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
256 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
257 w2_re=Math.sqrt(u2);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
258 w2_im=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
259 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
260 else
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
261 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
262 w2_re=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
263 w2_im=Math.sqrt(-u2);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
264 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
265 if(PRINT_DEBUG) System.err.println("u1="+u1+" u2="+u2+" jmin="+jmin);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
266 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
267 else
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
268 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
269 mt = 3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
270 final double w_mod2_sq=u[1]*u[1]+u[2]*u[2],w_mod2=Math.sqrt(w_mod2_sq),w_mod=Math.sqrt(w_mod2);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
271 if(w_mod2_sq<=0)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
272 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
273 w1_re=w1_im=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
274 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
275 else
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
276 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
277 // calculate square root of a complex number (u[1],u[2])
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
278 // the result is in the (w1_re,w1_im)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
279 final double absu1=Math.abs(u[1]),absu2=Math.abs(u[2]),w;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
280 if(absu1>=absu2)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
281 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
282 final double t=absu2/absu1;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
283 w=Math.sqrt(absu1*0.5 * (1.0 + Math.sqrt(1.0 + t * t)));
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
284 if(PRINT_DEBUG) System.err.println(" Path1 ");
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
285 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
286 else
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
287 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
288 final double t=absu1/absu2;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
289 w=Math.sqrt(absu2*0.5 * (t + Math.sqrt(1.0 + t * t)));
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
290 if(PRINT_DEBUG) System.err.println(" Path1a ");
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
291 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
292 if(u[1]>=0)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
293 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
294 w1_re=w;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
295 w1_im=u[2]/(2*w);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
296 if(PRINT_DEBUG) System.err.println(" Path2 ");
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
297 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
298 else
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
299 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
300 final double vi = (u[2] >= 0) ? w : -w;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
301 w1_re=u[2]/(2*vi);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
302 w1_im=vi;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
303 if(PRINT_DEBUG) System.err.println(" Path2a ");
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
304 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
305 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
306 final double absu0=Math.abs(u[0]);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
307 if(w_mod2>=absu0)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
308 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
309 mod_w1w2=w_mod2;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
310 mod_w1w2_squared=w_mod2_sq;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
311 w2_re=w1_re;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
312 w2_im=-w1_im;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
313 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
314 else
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
315 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
316 mod_w1w2=-1;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
317 mod_w1w2_squared=w_mod2*absu0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
318 if(u[0]>=0)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
319 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
320 w2_re=Math.sqrt(absu0);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
321 w2_im=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
322 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
323 else
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
324 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
325 w2_re=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
326 w2_im=Math.sqrt(absu0);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
327 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
328 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
329 if(PRINT_DEBUG) System.err.println("u[0]="+u[0]+"u[1]="+u[1]+" u[2]="+u[2]+" absu0="+absu0+" w_mod="+w_mod+" w_mod2="+w_mod2);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
330 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
331
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
332 /* Solve the quadratic in order to obtain the roots
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
333 * to the quartic */
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
334 if(mod_w1w2>0)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
335 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
336 // a shorcut to reduce rounding error
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
337 w3_re=qq/(-8)/mod_w1w2;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
338 w3_im=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
339 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
340 else if(mod_w1w2_squared>0)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
341 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
342 // regular path
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
343 final double mqq8n=qq/(-8)/mod_w1w2_squared;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
344 w3_re=mqq8n*(w1_re*w2_re-w1_im*w2_im);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
345 w3_im=-mqq8n*(w1_re*w2_im+w2_re*w1_im);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
346 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
347 else
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
348 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
349 // typically occur when qq==0
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
350 w3_re=w3_im=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
351 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
352
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
353 final double h = r4 * a;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
354 if(PRINT_DEBUG) System.err.println("w1_re="+w1_re+" w1_im="+w1_im+" w2_re="+w2_re+" w2_im="+w2_im+" w3_re="+w3_re+" w3_im="+w3_im+" h="+h);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
355
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
356 re_root[0]=w1_re+w2_re+w3_re-h;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
357 im_root[0]=w1_im+w2_im+w3_im;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
358 re_root[1]=-(w1_re+w2_re)+w3_re-h;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
359 im_root[1]=-(w1_im+w2_im)+w3_im;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
360 re_root[2]=w2_re-w1_re-w3_re-h;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
361 im_root[2]=w2_im-w1_im-w3_im;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
362 re_root[3]=w1_re-w2_re-w3_re-h;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
363 im_root[3]=w1_im-w2_im-w3_im;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
364
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
365 return 4;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
366 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
367
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
368
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
369
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
370 static void setRandomP(final double [] p,final int n,java.util.Random r)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
371 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
372 if(r.nextDouble()<0.1)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
373 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
374 // integer coefficiens
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
375 for(int j=0;j<p.length;j++)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
376 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
377 if(j<=n)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
378 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
379 p[j]=(r.nextInt(2)<=0?-1:1)*r.nextInt(10);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
380 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
381 else
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
382 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
383 p[j]=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
384 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
385 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
386 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
387 else
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
388 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
389 // real coefficiens
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
390 for(int j=0;j<p.length;j++)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
391 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
392 if(j<=n)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
393 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
394 p[j]=-1+2*r.nextDouble();
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
395 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
396 else
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
397 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
398 p[j]=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
399 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
400 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
401 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
402 if(Math.abs(p[n])<1e-2)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
403 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
404 p[n]=(r.nextInt(2)<=0?-1:1)*(0.1+r.nextDouble());
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
405 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
406 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
407
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
408
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
409 static void checkValues(final double [] p,
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
410 final int n,
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
411 final double rex,
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
412 final double imx,
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
413 final double eps,
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
414 final String txt)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
415 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
416 double res=0,ims=0,sabs=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
417 final double xabs=Math.abs(rex)+Math.abs(imx);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
418 for(int k=n;k>=0;k--)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
419 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
420 final double res1=(res*rex-ims*imx)+p[k];
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
421 final double ims1=(ims*rex+res*imx);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
422 res=res1;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
423 ims=ims1;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
424 sabs+=xabs*sabs+p[k];
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
425 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
426 sabs=Math.abs(sabs);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
427 if(false && sabs>1/eps?
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
428 (!(Math.abs(res/sabs)<=eps)||!(Math.abs(ims/sabs)<=eps))
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
429 :
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
430 (!(Math.abs(res)<=eps)||!(Math.abs(ims)<=eps)))
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
431 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
432 throw new RuntimeException(
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
433 getPolinomTXT(p)+"\n"+
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
434 "\t x.r="+rex+" x.i="+imx+"\n"+
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
435 "res/sabs="+(res/sabs)+" ims/sabs="+(ims/sabs)+
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
436 " sabs="+sabs+
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
437 "\nres="+res+" ims="+ims+" n="+n+" eps="+eps+" "+
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
438 " sabs>1/eps="+(sabs>1/eps)+
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
439 " f1="+(!(Math.abs(res/sabs)<=eps)||!(Math.abs(ims/sabs)<=eps))+
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
440 " f2="+(!(Math.abs(res)<=eps)||!(Math.abs(ims)<=eps))+
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
441 " "+txt);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
442 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
443 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
444
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
445 static String getPolinomTXT(final double [] p)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
446 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
447 final StringBuilder buf=new StringBuilder();
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
448 buf.append("order="+(p.length-1)+"\t");
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
449 for(int k=0;k<p.length;k++)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
450 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
451 buf.append("p["+k+"]="+p[k]+";");
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
452 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
453 return buf.toString();
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
454 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
455
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
456 static String getRootsTXT(int nr,final double [] re,final double [] im)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
457 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
458 final StringBuilder buf=new StringBuilder();
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
459 for(int k=0;k<nr;k++)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
460 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
461 buf.append("x."+k+"("+re[k]+","+im[k]+")\n");
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
462 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
463 return buf.toString();
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
464 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
465
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
466 static void testRoots(final int n,
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
467 final int n_tests,
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
468 final java.util.Random rn,
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
469 final double eps)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
470 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
471 final double [] p=new double [n+1];
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
472 final double [] rex=new double [n],imx=new double [n];
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
473 for(int i=0;i<n_tests;i++)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
474 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
475 for(int dg=n;dg-->-1;)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
476 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
477 for(int dr=3;dr-->0;)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
478 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
479 setRandomP(p,n,rn);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
480 for(int j=0;j<=dg;j++)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
481 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
482 p[j]=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
483 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
484 if(dr==0)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
485 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
486 p[0]=-1+2.0*rn.nextDouble();
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
487 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
488 else if(dr==1)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
489 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
490 p[0]=p[1]=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
491 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
492
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
493 findPolynomialRoots(n,p,rex,imx);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
494
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
495 for(int j=0;j<n;j++)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
496 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
497 //System.err.println("j="+j);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
498 checkValues(p,n,rex[j],imx[j],eps," t="+i);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
499 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
500 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
501 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
502 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
503 System.err.println("testRoots(): n_tests="+n_tests+" OK, dim="+n);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
504 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
505
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
506
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
507
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
508
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
509 static final double EPS=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
510
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
511 public static int root1(final double [] p,final double [] re_root,final double [] im_root)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
512 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
513 if(!(Math.abs(p[1])>EPS))
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
514 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
515 re_root[0]=im_root[0]=Double.NaN;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
516 return -1;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
517 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
518 re_root[0]=-p[0]/p[1];
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
519 im_root[0]=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
520 return 1;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
521 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
522
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
523 public static int root2(final double [] p,final double [] re_root,final double [] im_root)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
524 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
525 if(!(Math.abs(p[2])>EPS))
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
526 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
527 re_root[0]=re_root[1]=im_root[0]=im_root[1]=Double.NaN;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
528 return -1;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
529 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
530 final double b2=0.5*(p[1]/p[2]),c=p[0]/p[2],d=b2*b2-c;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
531 if(d>=0)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
532 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
533 final double sq=Math.sqrt(d);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
534 if(b2<0)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
535 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
536 re_root[1]=-b2+sq;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
537 re_root[0]=c/re_root[1];
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
538 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
539 else if(b2>0)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
540 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
541 re_root[0]=-b2-sq;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
542 re_root[1]=c/re_root[0];
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
543 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
544 else
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
545 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
546 re_root[0]=-b2-sq;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
547 re_root[1]=-b2+sq;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
548 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
549 im_root[0]=im_root[1]=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
550 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
551 else
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
552 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
553 final double sq=Math.sqrt(-d);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
554 re_root[0]=re_root[1]=-b2;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
555 im_root[0]=sq;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
556 im_root[1]=-sq;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
557 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
558 return 2;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
559 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
560
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
561 public static int root3(final double [] p,final double [] re_root,final double [] im_root)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
562 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
563 final double vs=p[3];
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
564 if(!(Math.abs(vs)>EPS))
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
565 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
566 re_root[0]=re_root[1]=re_root[2]=
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
567 im_root[0]=im_root[1]=im_root[2]=Double.NaN;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
568 return -1;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
569 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
570 final double a=p[2]/vs,b=p[1]/vs,c=p[0]/vs;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
571 /* zsolve_cubic.c - finds the complex roots of x^3 + a x^2 + b x + c = 0
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
572 */
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
573 final double q = (a * a - 3 * b);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
574 final double r = (a*(2 * a * a - 9 * b) + 27 * c);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
575
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
576 final double Q = q / 9;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
577 final double R = r / 54;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
578
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
579 final double Q3 = Q * Q * Q;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
580 final double R2 = R * R;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
581
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
582 final double CR2 = 729 * r * r;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
583 final double CQ3 = 2916 * q * q * q;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
584 final double a3=a/3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
585
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
586 if (R == 0 && Q == 0)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
587 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
588 re_root[0]=re_root[1]=re_root[2]=-a3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
589 im_root[0]=im_root[1]=im_root[2]=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
590 return 3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
591 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
592 else if (CR2 == CQ3)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
593 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
594 /* this test is actually R2 == Q3, written in a form suitable
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
595 for exact computation with integers */
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
596
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
597 /* Due to finite precision some double roots may be missed, and
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
598 will be considered to be a pair of complex roots z = x +/-
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
599 epsilon i close to the real axis. */
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
600
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
601 final double sqrtQ = Math.sqrt (Q);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
602
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
603 if (R > 0)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
604 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
605 re_root[0] = -2 * sqrtQ - a3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
606 re_root[1]=re_root[2]=sqrtQ - a3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
607 im_root[0]=im_root[1]=im_root[2]=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
608 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
609 else
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
610 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
611 re_root[0]=re_root[1] = -sqrtQ - a3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
612 re_root[2]=2 * sqrtQ - a3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
613 im_root[0]=im_root[1]=im_root[2]=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
614 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
615 return 3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
616 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
617 else if (R2 < Q3)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
618 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
619 final double sgnR = (R >= 0 ? 1 : -1);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
620 final double ratio = sgnR * Math.sqrt (R2 / Q3);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
621 final double theta = Math.acos (ratio);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
622 final double norm = -2 * Math.sqrt (Q);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
623 final double r0 = norm * Math.cos (theta/3) - a3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
624 final double r1 = norm * Math.cos ((theta + 2.0 * Math.PI) / 3) - a3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
625 final double r2 = norm * Math.cos ((theta - 2.0 * Math.PI) / 3) - a3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
626
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
627 re_root[0]=r0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
628 re_root[1]=r1;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
629 re_root[2]=r2;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
630 im_root[0]=im_root[1]=im_root[2]=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
631 return 3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
632 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
633 else
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
634 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
635 final double sgnR = (R >= 0 ? 1 : -1);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
636 final double A = -sgnR * Math.pow (Math.abs (R) + Math.sqrt (R2 - Q3), 1.0 / 3.0);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
637 final double B = Q / A;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
638
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
639 re_root[0]=A + B - a3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
640 im_root[0]=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
641 re_root[1]=-0.5 * (A + B) - a3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
642 im_root[1]=-(SQRT3*0.5) * Math.abs(A - B);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
643 re_root[2]=re_root[1];
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
644 im_root[2]=-im_root[1];
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
645 return 3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
646 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
647
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
648 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
649
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
650
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
651 static void root3a(final double [] p,final double [] re_root,final double [] im_root)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
652 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
653 if(Math.abs(p[3])>EPS)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
654 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
655 final double v=p[3],
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
656 a=p[2]/v,b=p[1]/v,c=p[0]/v,
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
657 a3=a/3,a3a=a3*a,
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
658 pd3=(b-a3a)/3,
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
659 qd2=a3*(a3a/3-0.5*b)+0.5*c,
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
660 Q=pd3*pd3*pd3+qd2*qd2;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
661 if(Q<0)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
662 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
663 // three real roots
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
664 final double SQ=Math.sqrt(-Q);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
665 final double th=Math.atan2(SQ,-qd2);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
666 im_root[0]=im_root[1]=im_root[2]=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
667 final double f=2*Math.sqrt(-pd3);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
668 re_root[0]=f*Math.cos(th/3)-a3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
669 re_root[1]=f*Math.cos((th+2*Math.PI)/3)-a3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
670 re_root[2]=f*Math.cos((th+4*Math.PI)/3)-a3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
671 //System.err.println("3r");
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
672 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
673 else
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
674 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
675 // one real & two complex roots
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
676 final double SQ=Math.sqrt(Q);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
677 final double r1=-qd2+SQ,r2=-qd2-SQ;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
678 final double v1=Math.signum(r1)*Math.pow(Math.abs(r1),1.0/3),
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
679 v2=Math.signum(r2)*Math.pow(Math.abs(r2),1.0/3),
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
680 sv=v1+v2;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
681 // real root
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
682 re_root[0]=sv-a3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
683 im_root[0]=0;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
684 // complex roots
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
685 re_root[1]=re_root[2]=-0.5*sv-a3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
686 im_root[1]=(v1-v2)*(SQRT3*0.5);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
687 im_root[2]=-im_root[1];
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
688 //System.err.println("1r2c");
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
689 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
690 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
691 else
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
692 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
693 re_root[0]=re_root[1]=re_root[2]=im_root[0]=im_root[1]=im_root[2]=Double.NaN;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
694 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
695 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
696
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
697
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
698 static void printSpecialValues()
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
699 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
700 for(int st=0;st<6;st++)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
701 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
702 //final double [] p=new double []{8,1,3,3.6,1};
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
703 final double [] re_root=new double [4],im_root=new double [4];
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
704 final double [] p;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
705 final int n;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
706 if(st<=3)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
707 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
708 if(st<=0)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
709 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
710 p=new double []{2,-4,6,-4,1};
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
711 //p=new double []{-6,6,-6,8,-2};
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
712 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
713 else if(st==1)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
714 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
715 p=new double []{0,-4,8,3,-9};
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
716 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
717 else if(st==2)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
718 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
719 p=new double []{-1,0,2,0,-1};
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
720 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
721 else
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
722 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
723 p=new double []{-5,2,8,-2,-3};
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
724 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
725 root4(p,re_root,im_root);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
726 n=4;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
727 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
728 else
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
729 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
730 p=new double []{0,2,0,1};
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
731 if(st==4)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
732 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
733 p[1]=-p[1];
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
734 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
735 root3(p,re_root,im_root);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
736 n=3;
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
737 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
738 System.err.println("======== n="+n);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
739 for(int i=0;i<=n;i++)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
740 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
741 if(i<n)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
742 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
743 System.err.println(String.valueOf(i)+"\t"+
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
744 p[i]+"\t"+
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
745 re_root[i]+"\t"+
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
746 im_root[i]);
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
747 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
748 else
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
749 {
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
750 System.err.println(String.valueOf(i)+"\t"+p[i]+"\t");
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
751 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
752 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
753 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
754 }
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
755
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
756
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
757
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
758 public static void main(final String [] args)
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
759 {
11107
e554162ab094 8019625: Test compiler/8005956/PolynomialRoot.java timeouts on Solaris SPARCs
adlertz
parents: 11045
diff changeset
760 if (System.getProperty("os.arch").equals("x86") ||
e554162ab094 8019625: Test compiler/8005956/PolynomialRoot.java timeouts on Solaris SPARCs
adlertz
parents: 11045
diff changeset
761 System.getProperty("os.arch").equals("amd64") ||
e554162ab094 8019625: Test compiler/8005956/PolynomialRoot.java timeouts on Solaris SPARCs
adlertz
parents: 11045
diff changeset
762 System.getProperty("os.arch").equals("x86_64")){
e554162ab094 8019625: Test compiler/8005956/PolynomialRoot.java timeouts on Solaris SPARCs
adlertz
parents: 11045
diff changeset
763 final long t0=System.currentTimeMillis();
e554162ab094 8019625: Test compiler/8005956/PolynomialRoot.java timeouts on Solaris SPARCs
adlertz
parents: 11045
diff changeset
764 final double eps=1e-6;
e554162ab094 8019625: Test compiler/8005956/PolynomialRoot.java timeouts on Solaris SPARCs
adlertz
parents: 11045
diff changeset
765 //checkRoots();
e554162ab094 8019625: Test compiler/8005956/PolynomialRoot.java timeouts on Solaris SPARCs
adlertz
parents: 11045
diff changeset
766 final java.util.Random r=new java.util.Random(-1381923);
e554162ab094 8019625: Test compiler/8005956/PolynomialRoot.java timeouts on Solaris SPARCs
adlertz
parents: 11045
diff changeset
767 printSpecialValues();
11045
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
768
11107
e554162ab094 8019625: Test compiler/8005956/PolynomialRoot.java timeouts on Solaris SPARCs
adlertz
parents: 11045
diff changeset
769 final int n_tests=100000;
e554162ab094 8019625: Test compiler/8005956/PolynomialRoot.java timeouts on Solaris SPARCs
adlertz
parents: 11045
diff changeset
770 //testRoots(2,n_tests,r,eps);
e554162ab094 8019625: Test compiler/8005956/PolynomialRoot.java timeouts on Solaris SPARCs
adlertz
parents: 11045
diff changeset
771 //testRoots(3,n_tests,r,eps);
e554162ab094 8019625: Test compiler/8005956/PolynomialRoot.java timeouts on Solaris SPARCs
adlertz
parents: 11045
diff changeset
772 testRoots(4,n_tests,r,eps);
e554162ab094 8019625: Test compiler/8005956/PolynomialRoot.java timeouts on Solaris SPARCs
adlertz
parents: 11045
diff changeset
773 final long t1=System.currentTimeMillis();
e554162ab094 8019625: Test compiler/8005956/PolynomialRoot.java timeouts on Solaris SPARCs
adlertz
parents: 11045
diff changeset
774 System.err.println("PolynomialRoot.main: "+n_tests+" tests OK done in "+(t1-t0)+" milliseconds. ver=$Id: PolynomialRoot.java,v 1.105 2012/08/18 00:00:05 mal Exp $");
e554162ab094 8019625: Test compiler/8005956/PolynomialRoot.java timeouts on Solaris SPARCs
adlertz
parents: 11045
diff changeset
775 System.out.println("PASSED");
e554162ab094 8019625: Test compiler/8005956/PolynomialRoot.java timeouts on Solaris SPARCs
adlertz
parents: 11045
diff changeset
776 } else {
e554162ab094 8019625: Test compiler/8005956/PolynomialRoot.java timeouts on Solaris SPARCs
adlertz
parents: 11045
diff changeset
777 System.out.println("PASS test for non-x86");
e554162ab094 8019625: Test compiler/8005956/PolynomialRoot.java timeouts on Solaris SPARCs
adlertz
parents: 11045
diff changeset
778 }
e554162ab094 8019625: Test compiler/8005956/PolynomialRoot.java timeouts on Solaris SPARCs
adlertz
parents: 11045
diff changeset
779 }
11045
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
780
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
781
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
782
9347cae673f0 8017510: Add a regression test for 8005956
adlertz
parents:
diff changeset
783 }