\START92\ \COMMENT= \NAME=p4exact \FILE=P4EXACT.89F (poly) Func \(C)\{a4,a3,a2,a1,a0}:Func Local a0,a1,a2,a3,p,q,r,z,s,t,u If when(poly[1]=0,true,false,false):Return p3exact(mid(poly,2)) poly[2]/(poly[1])\->\a3 poly[3]/(poly[1])\->\a2 poly[4]/(poly[1])\->\a1 poly[5]/(poly[1])\->\a0 a2-3*a3^2/8\->\p a1-a2*a3/2+a3^3/8\->\q a0-a1*a3/4+a2*a3^2/16-3*a3^4/256\->\r p3exact({8,\(-)\4*p,\(-)\8*r,4*r*p-q^2})\->\z If when(z[1]\!=\0,true,false,true) Then z[1]\->\z ElseIf when(z[2]\!=\0,true,false,true) Then z[2]\->\z Else z[3]\->\z EndIf \root\(2*z-p)\->\s z-\root\(z^2-r)\->\t z+\root\(z^2-r)\->\u Return {(\(-)\s-\root\(s^2-4*t))/2,(\(-)\s+\root\(s^2-4*t))/2,(s-\root\(s^2-4*u))/2,(s+\root\(s^2-4*u))/2}-a3/4 EndFunc \STOP92\