home *** CD-ROM | disk | FTP | other *** search
- quadrt(a,root1,root2,tol,numrt)
-
- /* this function solves any quadratic equation of the form */
- /* a(0)x**2 + a(1)x + a(2) for real or imaginary roots.*/
-
- int *numrt;
- float a[],root1[],root2[],tol;
-
- {
-
- float w,x,y,z,zero;
- extern double fabs(),sqrt();
-
- zero = tol/10.;
-
- if((fabs(a[0])-zero) <= 0.)
- {
- if((fabs(a[1])-zero) <= 0.)
- {
- *numrt = 0;
- return;
- }
- *numrt = 1;
- root1[0] = -a[2]/a[1];
- root1[1] = 0.;
- return;
- }
- *numrt = 2;
- x = (a[1] * a[1]) - 4.0 * a[0] * a[2];
- y = a[0] + a[0];
- z = sqrt(fabs(x))/y;
- w = -a[1]/y;
-
- if(x >= 0.0)
- {
- root1[0] = w + z;
- root1[1] = 0.0;
- root2[0] = w - z;
- root2[1] = 0.0;
- return;
- }
- root1[0] = w;
- root1[1] = z;
- root2[0] = w;
- root2[1] = -z;
- return;
- }
-