Hi,
We have to perform intensive floating point calculations on C674x core ( OMAP-L137 ). An example code is in the attachment. There is a fuction reg_test_3_order which calculates params for regulator we have to do calculations as fast as possible. What kind of optimization can be done to fit C674x hardware ?
We are running this code from L2 DSP RAM, code is compiled with -O2 ( with -O3 compiler hangs ) and for C674x core.
What can be done to improve dsp utilization with this code? Is -O2, L2 RAM the only way to improve performace.
void reg_test_3_order (float data[]) { // INPUT: [a1, a2, a3, a4, b1, b2, b3, b4, d0, d1, d2, d3, d4, d5, d6, d7, d8] // OUTPUT: [q0, q1, q2, q3, q4, p1, p2, p3] float a1 = data[0]; float a2 = data[1]; float a3 = data[2]; float a4 = data[3]; float b1 = data[4]; float b2 = data[5]; float b3 = data[6]; float b4 = data[7]; float d0 = data[8]; float d1 = data[9]; float d2 = data[10]; float d3 = data[11]; float d4 = data[12]; float d5 = data[13]; float d6 = data[14]; float d7 = data[15]; float d8 = data[16]; float x1 = d1-a1; float x2 = d2-a2; float x3 = d3-a3; float x4 = d4-a4; float x5 = d5; float x6 = d6; float x7 = d7; float x8 = d8; float a1_2 = a1 * a1; float a1_3 = a1 * a1 * a1; float a2_2 = a2 * a2; float a2_3 = a2 * a2 * a2; float a3_2 = a3 * a3; float a3_3 = a3 * a3 * a3; float a4_2 = a4 * a4; float a4_3 = a4 * a4 * a4; float b1_2 = b1 * b1; float b1_3 = b1 * b1 * b1; float b1_4 = b1 * b1 * b1 * b1; float b1_5 = b1 * b1 * b1 * b1 * b1; float b2_2 = b2 * b2; float b2_3 = b2 * b2 * b2; float b2_4 = b2 * b2 * b2 * b2; float b2_5 = b2 * b2 * b2 * b2 * b2; float b3_2 = b3 * b3; float b3_3 = b3 * b3 * b3; float b3_4 = b3 * b3 * b3 * b3; float b3_5 = b3 * b3 * b3 * b3 * b3; float b4_2 = b4 * b4; float b4_3 = b4 * b4 * b4; float b4_4 = b4 * b4 * b4 * b4; float b4_5 = b4 * b4 * b4 * b4 * b4; float a1_a2 = a1*a2; float a1_a3 = a1*a3; float a1_a4 = a1*a4; float a1_b1 = a1*b1; float a1_b2 = a1*b2; float a1_b3 = a1*b3; float a1_b4 = a1*b4; float a2_a3 = a2*a3; float a2_a4 = a2*a4; float a2_b1 = a2*b1; float a2_b2 = a2*b2; float a2_b3 = a2*b3; float a2_b4 = a2*b4; float a3_a4 = a3*a4; float a3_b1 = a3*b1; float a3_b2 = a3*b2; float a3_b3 = a3*b3; float a3_b4 = a3*b4; float a4_b1 = a4*b1; float a4_b2 = a4*b2; float a4_b3 = a4*b3; float a4_b4 = b4*a4; float b1_b2 = b1*b2; float b1_b3 = b1*b3; float b1_b4 = b1*b4; float b2_b3 = b2*b3; float b2_b4 = b2*b4; float b3_b4 = b3*b4; float num1 = (a1_3*b4_4+a2_2*b4_3*b3-2*b2_2*b4_2*a4*a1_a2-b4_3*a4_b3-b3_2*b4_2*a1_a4+2*b4_3*b2*a1_a4-2*b4_4*a1_a2+a1_2*b3_2*b4_2*a3+b4_3*b3*a1_a3+3*b4_2*a1_2*b3*a4_b2-3*b4_2*b1_2*a4*a2_a3+2*b4_2*a2_2*b2*a4_b1-a2_2*b3_2*b4*a4_b1+b4*a2_a3*a4_b1*b2_b3-3*a4_2*b4*a1_b1*b2_b3+b4_2*b2*a1_a3*a4_b1+2*b3_2*b4*a1_a3*a4_b1-b4_2*b3*a1_a2*a4_b1-b2_2*b4*a1_a3*a4_b3+3*b4_2*a4_2*b1_2*a1+b4_2*a3_2*b2_2*a1+b3_2*b4*a1_a2*a4_b2-a3_2*b1_2*b4*a4_b3-2*b4_2*a3_2*b3*a1_b1-a4_2*b2_2*b4*a2_b1-a3_2*b4_2*b2*a2_b1+2*a4_2*b1_2*b4*a2_b3+b4_2*a2_2*b3*a3_b1+a4_2*b1_2*b4*a3_b2-b4_2*b3*a1_a2*a3_b2+b4_4*a3+a3_2*b4_2*b2_b3+2*b4_3*b1*a2_a4-3*b4_3*a1_2*a4_b1-a4_3*b1_3*b4-2*a4_2*b4_2*b1_b2+b4_2*a3_3*b1_2-b4_3*a2_3*b1-2*a3_2*b4_3*b1+3*b4_2*a3_a4*b1_b3-a4_2*b3_2*b1_b4-a1_2*b3_3*a4_b4+b4_3*a2_2*a1_b2-b3_2*a3_a4*b2_b4+a4_2*b2_2*b3_b4+a4_2*b2_3*a1_b4-2*b4_2*a2_a4*b2_b3-b4_3*a1_2*a2_b3+3*b4_3*a1_a2*a3_b1-2*b4_3*a1_2*a3_b2-b3_2*b4_2*a2_a3+b3_3*b4*a2_a4)*x1+(b2_2*a3_a4*b3_b4+b3_2*b4_2*a4-b4_2*a3_a4*b1_b2-3*b4_2*a1_a4*b2_b3-a2_2*b4_3*b2+a3_2*b4_2*b1_b3+b4_3*b3*a1_a2-b4_3*a4_b2+2*b4_3*b2*a1_a3-b3_2*a2_a4*b2_b4+2*b4_3*b1*a1_a4-a1_2*b4_4-b4_3*b1*a2_a3-b3_2*a3_a4*b1_b4+2*b2_2*b4_2*a2_a4+b4_2*a2_a3*b2_b3-b3_2*b4_2*a1_a3-a4_2*b1_2*b4_2-b4_3*a3_b3+b4_4*a2-a4_2*b2_3*b4+b3_3*b4*a1_a4-a3_2*b2_2*b4_2+2*a4_2*b1_b2*b3_b4)*x2+(-2*b4_2*a2_a4*b1_b2+b3_2*a2_a4*b1_b4-a4_2*b1_2*b3_b4+2*b4_2*b3*a4_b2-b4_3*a2_b3+a3_2*b4_2*b1_b2-b3_3*a4_b4+a4_2*b2_2*b1_b4+a2_2*b4_3*b1+b1_2*b4_2*a3_a4-b4_3*a4_b1-b4_3*a3_b2-a3_a4*b1_b2*b3_b4+b4_2*a1_a4*b1_b3+b4_4*a1+b3_2*b4_2*a3-b4_2*a2_a3*b1_b3-b4_3*b1*a1_a3)*x3+(b1_2*a3_a4*b3_b4-b3_2*a1_a4*b1_b4+b3_2*b4*a4_b2-2*b4_2*b3*a4_b1+b4_2*a1_a4*b1_b2+b4_2*a1_a3*b1_b3-a3_2*b1_2*b4_2-b2_2*b4_2*a4+2*b4_3*a3_b1-a4_2*b1_2*b2_b4+b1_2*b4_2*a2_a4+b4_3*a2_b2-b4_2*b3*a3_b2-b4_4-b4_3*b1*a1_a2)*x4+(b4_3*b3+a1_a4*b1_b2*b3_b4-b2_2*b4*a4_b3+a4_2*b1_3*b4+b2_2*b4_2*a3+a1_2*b4_3*b1-b4_3*a2_b1-b4_3*a1_b2-b4_2*b3*a3_b1-2*b1_2*b4_2*a1_a4-b4_2*a1_a3*b1_b2+2*b4_2*b2*a4_b1+b1_2*b4_2*a2_a3-b1_2*a2_a4*b3_b4+b3_2*b4*a4_b1)*x5+(-a2_2*b1_2*b4_2-b4_3*a1_b1-2*b4*a4_b1*b2_b3+b4_2*a1_a2*b1_b2+b2_3*a4_b4+b1_2*a2_a4*b2_b4-b3_2*b4_2-a1_2*b4_2*b1_b3+b1_2*b4_2*a1_a3+b4_2*b3*a1_b2-b1_3*b4*a3_a4-b2_2*a1_a4*b1_b4-b4_2*b2*a3_b1+2*b4_2*b3*a2_b1-b2_2*b4_2*a2+b1_2*b4_2*a4+b4_3*b2+b1_2*a1_a4*b3_b4)*x6+(b1_2*b4*a4_b3-2*b1_2*b4_2*a3+a3_2*b1_3*b4+b4_2*b3*a1_b1+a1_2*b3_2*b1_b4+b2_2*a1_a3*b1_b4+b2_2*b4_2*a1-2*b4_2*b2_b3-b1_3*b4*a2_a4-b1_2*a2_a3*b2_b4+3*b4*a3_b1*b2_b3+b4_3*b1-2*b1_2*a1_a3*b3_b4-a1_a2*b1_b2*b3_b4-2*b3_2*b4*a2_b1+b2_2*b4*a2_b3-b3_2*b4*a1_b2-a1_2*b4_2*b1_b2+b1_2*a1_a4*b2_b4+b3_3*b4+b1_2*b4_2*a1_a2-b2_3*a3_b4+a2_2*b1_2*b3_b4-b2_2*b4*a4_b1)*x7+(-b3_4-a2_2*b1_2*b3_2-2*b4_2*b1_b3-a4_2*b1_4-b2_4*a4+b3_3*a1_b2+3*b3_2*b2_b4+2*b3_3*a2_b1+b2_3*a2_b4+b2_3*a3_b3-b2_2*a1_a2*b1_b4+b1_2*a2_a3*b2_b3-3*b1_2*b4*a4_b2-3*b1_2*a1_a4*b2_b3-2*b4*a2_b1*b2_b3+2*b1_3*b3*a2_a4-b1_2*b2_2*a2_a4-a3_2*b1_3*b3+b3_2*a1_a2*b1_b2-b2_2*b3_2*a2-a1_2*b3_3*b1-a1_2*b1_2*b4_2+b1_2*b4_2*a2+a2_2*b1_2*b2_b4+2*b1_3*b4*a1_a4+b2_3*b1*a1_a4+2*b4_2*b2*a1_b1-b3_2*b4*a1_b1-2*b2_2*b4*a1_b3+2*a1_2*b1_b2*b3_b4-b1_3*b4*a2_a3-b2_2*a1_a3*b1_b3-b1_2*a1_a2*b3_b4+b1_3*b2*a3_a4-3*b3_2*b2*a3_b1+3*b1_2*b4*a3_b3+4*b2_2*b3*a4_b1-2*b1_2*b3_2*a4+2*b1_2*b3_2*a1_a3-b2_2*b4_2)*x8; float num2 = (-a2_2*b4_4+b4_4*a4-b4_4*a1_a3+2*b4_3*b3*a2_a3+a4_3*b1_2*b2_b4-a4_2*b3_2*b2_b4-b3_2*b4_2*a2_a4-a3_3*b4_2*b1_b2-b4_3*a1_a2*a4_b1+a3_2*b4_3*a1_b1+b2_2*a4_2*b4_2-a3_2*b3_2*b4_2+a2_3*b4_3*b2+a3_2*b4_3*b2+a1_2*b4_4*a2-a2_2*b4_3*a1_b3+b2_3*a4_2*a2_b4+b3_3*b4*a3_a4-b4_3*b1*a3_a4-b4_2*a3_a4*b2_b3+2*a4_2*b4_2*b1_b3-b3_3*a1_a2*a4_b4-2*b4_3*a1_a2*a3_b2+3*b4_2*b2*a2_a3*a4_b1+a2_2*b3_2*b4*a4_b2-a4_2*b4_2*b2*a1_b1+a4_2*b3_2*b4*a1_b1+b3_2*b4_2*a3*a1_a2+3*b4_2*b3*a1_a2*a4_b2-2*b4_2*b3*a1_a3*a4_b1-2*b2_2*a2_2*b4_2*a4+b2_2*a3_2*b4_2*a2-2*a4_2*b4*a2_b1*b2_b3+a3_2*b4*a4_b1*b2_b3-b2_2*b4*a2_a3*a4_b3-a4_2*b2_2*b4*a3_b1-a2_2*b4_2*b3*a3_b2)*x1+(a2_2*b4_3*b3-b4_3*a4_b3+b4_3*b2*a1_a4-b4_4*a1_a2-3*b4_2*b1_2*a4*a2_a3+2*b4_2*a2_2*b2*a4_b1-a2_2*b3_2*b4*a4_b1+b4*a2_a3*a4_b1*b2_b3-a4_2*b4*a1_b1*b2_b3+b3_2*b4*a1_a3*a4_b1-b4_2*b3*a1_a2*a4_b1+2*b4_2*a4_2*b1_2*a1-a3_2*b1_2*b4*a4_b3-b4_2*a3_2*b3*a1_b1-a4_2*b2_2*b4*a2_b1-a3_2*b4_2*b2*a2_b1+2*a4_2*b1_2*b4*a2_b3+b4_2*a2_2*b3*a3_b1+a4_2*b1_2*b4*a3_b2+b4_4*a3+a3_2*b4_2*b2_b3+2*b4_3*b1*a2_a4-b4_3*a1_2*a4_b1-a4_3*b1_3*b4-2*a4_2*b4_2*b1_b2+b4_2*a3_3*b1_2-b4_3*a2_3*b1-2*a3_2*b4_3*b1+3*b4_2*a3_a4*b1_b3-a4_2*b3_2*b1_b4-b3_2*a3_a4*b2_b4+a4_2*b2_2*b3_b4-2*b4_2*a2_a4*b2_b3+2*b4_3*a1_a2*a3_b1-b3_2*b4_2*a2_a3+b3_3*b4*a2_a4)*x2+(a3_2*b4_2*b2*a1_b1+a4_2*b2_2*b4*a1_b1-2*b4_2*b2*a1_a2*a4_b1-a4_2*b1_2*b4*a1_b3-b4*a1_a3*a4_b1*b2_b3+b4_3*b1*a1_a4-a4_2*b1_2*b4_2+b3_2*b4_2*a4-b4_3*a4_b2-b4_3*a3_b3+b3_2*b4*a1_a2*a4_b1+b1_2*b4_2*a4*a1_a3-a2_2*b4_3*b2-a1_2*b4_3*a3_b1-b4_2*b3*a1_a2*a3_b1-a4_2*b2_3*b4-a3_2*b2_2*b4_2+a2_2*b4_3*a1_b1+b4_4*a2-b4_3*b1*a2_a3+a1_2*b4_2*b3*a4_b1-b3_2*a3_a4*b1_b4+b4_2*a2_a3*b2_b3-b4_2*a1_a4*b2_b3+2*b2_2*b4_2*a2_a4+b2_2*a3_a4*b3_b4-b3_2*a2_a4*b2_b4-b4_2*a3_a4*b1_b2+b4_3*b2*a1_a3+2*a4_2*b1_b2*b3_b4+a3_2*b4_2*b1_b3)*x3+(b1_2*b4_2*a3_a4-b4_2*a1_a3*b2_b3+b3_2*a1_a4*b2_b4-b2_2*b4_2*a1_a4+a2_2*b4_3*b1-b4_3*a3_b2-b3_3*a4_b4-b4_3*a2_b3-a1_2*b3_2*b4*a4_b1-b4_3*a4_b1+b1_2*b4*a1_a3*a4_b3-b1_2*a3_2*b4_2*a1+a1_2*b4_2*b3*a3_b1+2*b4_2*b3*a4_b2+b3_2*b4_2*a3+b3_2*a2_a4*b1_b4+a4_2*b2_2*b1_b4-a4_2*b1_2*b3_b4-a3_a4*b1_b2*b3_b4-b4_2*a1_a4*b1_b3-b4_2*a2_a3*b1_b3-2*b4_2*a2_a4*b1_b2+a3_2*b4_2*b1_b2-a1_2*b4_3*a2_b1+b4_3*b1*a1_a3+a1_2*b4_2*b2*a4_b1+b4_3*b2*a1_a2+b1_2*b4_2*a4*a1_a2-a4_2*b1_2*b4*a1_b2)*x4+(b4_3*a1_b3-2*b4_3*b1*a1_a2+b1_2*a3_a4*b3_b4-b4_4-a3_2*b1_2*b4_2-2*a1_2*b1_2*b4_2*a4+a1_3*b4_3*b1-b2_2*b4_2*a4-b2_2*a1_a4*b3_b4-2*b4_2*b3*a4_b1-a1_2*b4_3*b2-b1_2*b4*a1_a2*a4_b3-a1_2*b4_2*b2*a3_b1+a4_2*b1_3*a1_b4+b4_3*a2_b2+b3_2*b4*a4_b2+b1_2*b4_2*a3*a1_a2-a4_2*b1_2*b2_b4+2*b4_3*a3_b1+b2_2*b4_2*a1_a3+3*b4_2*a1_a4*b1_b2+b1_2*b4_2*a2_a4-b4_2*b3*a3_b2+a1_2*b4*a4_b1*b2_b3)*x5+(-b3_2*b4_2*a1+a1_2*b4_2*b2_b3-a1_3*b4_2*b1_b3+2*b4_2*a1_a2*b1_b3-b1_3*a1_a3*a4_b4+b2_3*b4*a1_a4-b4_3*a2_b1+2*b4_2*b2*a4_b1+b1_2*b4_2*a2_a3-b2_2*b4*a4_b3-2*b4_2*a1_a3*b1_b2+b2_2*b4_2*a3-b1_2*b4_2*a1_a4-a1_a4*b1_b2*b3_b4-b1_2*a2_a4*b3_b4-b4_2*b3*a3_b1+b3_2*b4*a4_b1+a1_2*b1_2*b4*a4_b3+b1_2*b4*a1_a2*a4_b2-a1_2*b2_2*b4*a4_b1+a1_2*b1_2*b4_2*a3-b1_2*a2_2*b4_2*a1+a1_2*b4_2*b2*a2_b1+b4_3*b3+a4_2*b1_3*b4-b2_2*b4_2*a1_a2)*x6+(-b1_2*b4_2*a1_a3+a3_2*b1_3*a1_b4+3*a1_a3*b1_b2*b3_b4+b2_2*a1_a2*b3_b4-2*b3_2*a1_a2*b1_b4+a1_2*b2_2*b4_2-b1_3*a1_a2*a4_b4-a1_2*b3_2*b2_b4-a1_3*b4_2*b1_b2-b2_3*b4*a1_a3+a1_3*b3_2*b1_b4+b2_3*a4_b4+b3_3*a1_b4-2*b2_2*a1_a4*b1_b4-2*b4*a4_b1*b2_b3+b4_2*a1_a2*b1_b2-b2_2*b4_2*a2+b1_2*a2_a4*b2_b4-b4_2*b3*a1_b2+2*b4_2*b3*a2_b1+2*b1_2*a1_a4*b3_b4-b1_3*b4*a3_a4-b4_2*b2*a3_b1-b3_2*b4_2-2*a1_2*b1_2*b4*a3_b3+a1_2*b1_2*b4*a4_b2+a1_2*b1_2*b4_2*a2-a1_2*b4*a2_b1*b2_b3+a2_2*b1_2*b4*a1_b3+a1_2*b2_2*b4*a3_b1-b1_2*b4*a1_a2*a3_b2+b4_3*b2+b1_2*b4_2*a4-a2_2*b1_2*b4_2)*x7+(a3_2*b1_3*b4+2*b1_2*b4_2*a1_a2+b3_3*b4-2*b4_2*b2_b3-b2_3*a3_b4-b2_4*a1_a4-b3_4*a1-b1_2*b2_2*a4*a1_a2-3*a1_2*b1_2*b3*a4_b2+2*a1_2*b1_2*b3_2*a3-b1_2*a2_2*b3_2*a1-a1_2*b2_2*b4*a2_b1+a1_2*b3_2*b2*a2_b1-a1_2*b1_2*b4*a2_b3+a2_2*b1_2*b4*a1_b2-a1_2*b2_2*b3*a3_b1+b1_2*b3*a1_a2*a3_b2+b2_2*a1_a3*b1_b4+3*b4*a3_b1*b2_b3-b1_3*b4*a2_a4+b1_2*b4*a4_b3+a1_2*b4_2*b1_b2-2*b1_2*b4_2*a3-b1_2*a2_a3*b2_b4-b4_2*b3*a1_b1+2*b3_2*b4*a1_b2+a2_2*b1_2*b3_b4-2*b3_2*b4*a2_b1+b1_2*a1_a3*b3_b4-3*a1_a2*b1_b2*b3_b4-2*b1_2*a1_a4*b2_b4+b2_2*b4*a2_b3-b2_2*b4*a4_b1+b4_3*b1+2*b1_3*a1_a2*a4_b3-3*b3_2*a1_a3*b1_b2+a1_2*b2_3*a4_b1+b2_3*b3*a1_a3+b1_3*a1_a3*a4_b2-b1_4*a4_2*a1+a1_2*b3_3*b2-a1_3*b3_3*b1-b1_3*a1_a2*a3_b4-a1_3*b1_2*b4_2-a3_2*b1_3*a1_b3+2*a1_3*b1_b2*b3_b4+2*b3_3*b1*a1_a2+b2_3*b4*a1_a2-b2_2*b3_2*a1_a2-2*b1_2*b3_2*a1_a4+4*b2_2*a1_a4*b1_b3+2*a1_2*b1_3*a4_b4-2*a1_2*b2_2*b3_b4)*x8; float num3 = (-b4_4*a2_a3-b4_4*a1_a4+b4_2*b3*a2_a3*a4_b1-a4_2*b4_2*b3*a1_b1+b3_2*a3_2*b4_2*a1-2*b2_2*b4_2*a4*a2_a3+a3_2*b3_2*b4*a4_b1+b3_2*b4*a2_a3*a4_b2+3*b4_2*b3*a1_a3*a4_b2-a4_2*b3_2*b4*a2_b1+2*a4_2*b4_2*b2*a2_b1-a4_2*b4*a3_b1*b2_b3-a3_2*b4_2*b3*a2_b2-a3_2*b2_2*b4*a4_b3+a4_3*b1_2*b3_b4-2*a4_2*b4_2*b2_b3+a2_2*b4_3*a3_b2-b4_3*a1_a2*a3_b3-a2_2*b4_3*a4_b1-b4_3*a1_a3*a4_b1+2*b4_3*b2*a3_a4-2*b3_2*b4_2*a3_a4+a4_2*b3_3*b4-2*a3_2*b4_3*a1_b2+b2_2*a3_3*b4_2+a3_2*b4_3*b3+a4_2*b4_3*b1+a1_2*b4_4*a3+a4_2*b2_3*a3_b4-a3_3*b4_2*b1_b3-b3_3*a1_a3*a4_b4+b4_3*b3*a2_a4-a4_3*b2_2*b1_b4+a3_2*b4_3*a2_b1)*x1+(b4_4*a4-b4_4*a1_a3+b4_3*b3*a2_a3+a4_3*b1_2*b2_b4-a4_2*b3_2*b2_b4-a3_3*b4_2*b1_b2+b4_3*a1_a2*a4_b1+a3_2*b4_3*a1_b1+b2_2*a4_2*b4_2-a3_2*b3_2*b4_2+a3_2*b4_3*b2+b3_3*b4*a3_a4-b4_3*b1*a3_a4-b4_2*a3_a4*b2_b3+2*a4_2*b4_2*b1_b3+2*b4_2*b2*a2_a3*a4_b1-a4_2*b4_2*b2*a1_b1+a4_2*b3_2*b4*a1_b1-2*b4_2*b3*a1_a3*a4_b1+a3_2*b4*a4_b1*b2_b3-a4_2*b2_2*b4*a3_b1-b4_3*b2*a2_a4-a2_2*b4_3*a3_b1-b3_2*b4*a2_a3*a4_b1-b1_2*a4_2*b4_2*a2+a3_2*b4_2*b3*a2_b1)*x2+(b4_3*b1*a2_a4-a4_3*b1_3*b4+a4_2*b1_2*b4*a3_b2-b4_3*a1_2*a4_b1-b3_2*a3_a4*b2_b4+b4_4*a3+a3_2*b4_2*b2_b3-2*a3_2*b4_3*b1+b4_3*a1_a2*a3_b1+3*b4_2*a3_a4*b1_b3+b4_2*a3_3*b1_2-b4_3*b2*a2_a3-2*a4_2*b4_2*b1_b2+2*b4_2*a4_2*b1_2*a1-a4_2*b4*a1_b1*b2_b3-2*b4_2*b1_2*a4*a2_a3+a4_2*b2_2*b3_b4+a4_2*b1_2*b4*a2_b3-b4_3*a4_b3-b4_2*a3_2*b3*a1_b1+b4_3*b2*a1_a4+b3_2*b4*a1_a3*a4_b1-a4_2*b3_2*b1_b4-a3_2*b1_2*b4*a4_b3)*x3+(a3_2*b4_2*b2*a1_b1+a4_2*b2_2*b4*a1_b1-b4_2*b2*a1_a2*a4_b1-a4_2*b1_2*b4*a1_b3-b4*a1_a3*a4_b1*b2_b3+b4_3*b1*a1_a4-a4_2*b1_2*b4_2+b3_2*b4_2*a4-b4_3*a4_b2-b4_3*a3_b3+b1_2*b4_2*a4*a1_a3-2*b4_2*a2_a4*b1_b3-a1_2*b4_3*a3_b1-a4_2*b2_3*b4-a3_2*b2_2*b4_2+a2_2*b1_2*b4_2*a4-a3_2*b1_2*b4_2*a2+b4_3*b1*a2_a3+a1_2*b4_2*b3*a4_b1+b1_2*b4*a2_a3*a4_b3-a4_2*b1_2*b4*a2_b2-b3_2*a3_a4*b1_b4-b4_2*a1_a4*b2_b3+b2_2*b4_2*a2_a4+b2_2*a3_a4*b3_b4-b4_2*a3_a4*b1_b2+b4_3*b2*a1_a3+2*a4_2*b1_b2*b3_b4+a3_2*b4_2*b1_b3)*x4+(a2_2*b1_2*b4_2*a3+b1_2*b4_2*a3_a4-b4_2*a1_a3*b2_b3+b3_2*a1_a4*b2_b4-b2_2*b4_2*a1_a4-b4_3*a3_b2+b2_2*b4_2*a2_a3-b3_3*a4_b4-a1_2*b3_2*b4*a4_b1-b4_3*a4_b1+b1_2*b4*a1_a3*a4_b3-b1_2*a3_2*b4_2*a1+a1_2*b4_2*b3*a3_b1-b4_2*b2*a1_a2*a3_b1+2*b4_2*b3*a4_b2+b3_2*b4_2*a3+2*b3_2*a2_a4*b1_b4+a4_2*b2_2*b1_b4-a4_2*b1_2*b3_b4-a3_a4*b1_b2*b3_b4-b4_2*a1_a4*b1_b3-2*b4_2*a2_a3*b1_b3+a3_2*b4_2*b1_b2-b2_2*a2_a4*b3_b4+b1_3*a4_2*a2_b4+b4_3*b1*a1_a3+a1_2*b4_2*b2*a4_b1-b1_2*b4_2*a4*a1_a2-a4_2*b1_2*b4*a1_b2+b4*a1_a2*a4_b1*b2_b3-a2_2*b1_2*b4*a4_b3)*x5+(b2_2*b4_2*a1_a3+a1_3*b4_3*b1-b2_2*a1_a4*b3_b4+a4_2*b1_3*a1_b4-a3_2*b1_2*b4_2-b4_4+a2_2*b4_2*b2*a1_b1+a2_2*b1_2*b4*a4_b2-a1_2*b4_2*b3*a2_b1-b2_2*b4*a1_a2*a4_b1+2*b4_3*a2_b2+2*b4_3*a3_b1+b4_3*a1_b3+2*b1_2*b4_2*a2_a4+3*b4_2*a1_a4*b1_b2+b3_2*b4*a4_b2-2*b4_2*b3*a4_b1+b1_2*a3_a4*b3_b4-3*b4_3*b1*a1_a2-a4_2*b1_2*b2_b4-b4_2*b3*a3_b2+2*b1_2*b4_2*a3*a1_a2-2*a1_2*b1_2*b4_2*a4-a1_2*b4_2*b2*a3_b1+a1_2*b4*a4_b1*b2_b3-a1_2*b4_3*b2-b2_2*b4_2*a4-2*a2_a4*b1_b2*b3_b4-b4_2*a2_a3*b1_b2-a2_3*b1_2*b4_2-a2_2*b2_2*b4_2-b3_2*b4_2*a2+2*a2_2*b4_2*b1_b3+b4_2*a1_a2*b2_b3-b1_3*a2_a3*a4_b4+b2_3*b4*a2_a4)*x6+(-b3_2*b4_2*a1+a1_2*b4_2*b2_b3-a1_3*b4_2*b1_b3+3*b4_2*a1_a2*b1_b3-b1_3*a1_a3*a4_b4+b2_3*b4*a1_a4+b2_2*b4*a1_a2*a3_b1-a2_2*b1_2*b4*a3_b2+a1_2*b3_2*b4*a2_b1-2*b1_2*b4*a1_a2*a3_b3-a2_2*b4*a1_b1*b2_b3+2*b4_2*b2*a4_b1-b1_2*b4_2*a2_a3-b2_2*b4*a4_b3-2*b4_2*a1_a3*b1_b2+b2_2*b4_2*a3-b1_2*b4_2*a1_a4-a1_a4*b1_b2*b3_b4-b4_2*b3*a3_b1+b3_2*b4*a4_b1+b3_3*a2_b4+a1_2*b1_2*b4*a4_b3+2*b1_2*b4*a1_a2*a4_b2-a1_2*b2_2*b4*a4_b1+a1_2*b1_2*b4_2*a3+b4_3*b3+3*a2_a3*b1_b2*b3_b4+a2_3*b1_2*b3_b4+a2_2*b2_2*b3_b4-b2_2*a2_a4*b1_b4-b2_3*b4*a2_a3-a2_2*b1_3*a4_b4-2*a2_2*b3_2*b1_b4-2*b4_2*b3*a2_b2-b3_2*a1_a2*b2_b4+b1_3*a3_2*a2_b4+a4_2*b1_3*b4)*x7+(-b1_2*b4_2*a1_a3+a3_2*b1_3*a1_b4+3*a1_a3*b1_b2*b3_b4-b2_2*a1_a2*b3_b4-3*b3_2*a1_a2*b1_b4+a1_2*b2_2*b4_2+b1_3*a1_a2*a4_b4-a1_2*b3_2*b2_b4-a1_3*b4_2*b1_b2-b2_3*b4*a1_a3+a1_3*b3_2*b1_b4-a2_2*b2_2*b4*a1_b1+a2_2*b3_2*b2*a1_b1-a2_2*b1_2*b2_2*a4+2*b1_2*b3_2*a3*a1_a2+a2_2*b1_2*b3*a3_b2-3*b1_2*b3*a1_a2*a4_b2-b2_2*b3*a1_a2*a3_b1+b2_3*a4_b4+b3_3*a1_b4-2*b2_2*a1_a4*b1_b4-2*b4*a4_b1*b2_b3+3*b4_2*a1_a2*b1_b2-2*b2_2*b4_2*a2-2*b1_2*a2_a4*b2_b4-b4_2*b3*a1_b2+2*b1_2*a1_a4*b3_b4-b1_3*b4*a3_a4-b4_2*b2*a3_b1-b3_4*a2-b2_4*a2_a4-b3_2*b4_2-2*a1_2*b1_2*b4*a3_b3+a1_2*b1_2*b4*a4_b2+a1_2*b4*a2_b1*b2_b3+a1_2*b2_2*b4*a3_b1-b1_2*b4*a1_a2*a3_b2+b4_3*b2+b1_2*b4_2*a4+3*b1_2*a2_a3*b3_b4+b1_3*a2_a3*a4_b2+2*a2_2*b1_3*a4_b3-3*b3_2*a2_a3*b1_b2+a2_3*b1_2*b2_b4-a2_2*b1_3*a3_b4+b2_3*a1_a2*a4_b1-a4_2*b1_4*a2+a2_2*b2_3*b4-a2_3*b1_2*b3_2-a2_2*b2_2*b3_2+2*a2_2*b3_3*b1+b2_3*b3*a2_a3+b3_3*b2*a1_a2-2*b1_2*b3_2*a2_a4+4*b2_2*a2_a4*b1_b3-2*a2_2*b1_b2*b3_b4-a1_2*b3_3*a2_b1+3*b3_2*b4*a2_b2-a3_2*b1_3*a2_b3)*x8; float num4 = (b4_4*a1_2*a4+a3_2*b2_2*b4_2*a4-2*b4_2*a4_2*b2_2*a2-b4_2*a4_2*b3_2-b4_4*a2_a4-b4_2*b3*a2_a3*a4_b2+3*a4_2*b4_2*b3*a1_b2+b3_2*b4_2*a4*a1_a3+b4_3*b3*a3_a4-b2_2*a4_2*b4*a3_b3+b4_3*a4_2*b2-b4_2*a3_2*b3*a4_b1-2*a4_2*b4_3*a1_b1-2*b4_3*a1_a3*a4_b2-b4_3*a1_a2*a4_b3+b4_3*a2_a3*a4_b1+b4_2*a4_2*b2*a3_b1+b3_2*a4_2*b4*a3_b1+b2_3*a4_3*b4+b3_2*a4_2*b4*a2_b2+b4_2*b1_2*a4_3-2*a4_3*b1_b2*b3_b4+b4_3*a2_2*a4_b2-a4_2*b3_3*a1_b4)*x1+(2*a4_2*b4_2*b2*a2_b1-a4_2*b3_2*b4*a2_b1-b4_4*a1_a4+a4_2*b3_3*b4+a4_2*b4*a3_b1*b2_b3+b4_3*b2*a3_a4-a3_2*b4_2*b2*a4_b1-a4_3*b2_2*b1_b4-a2_2*b4_3*a4_b1-a4_2*b4_2*b3*a1_b1+a4_2*b4_3*b1+a4_3*b1_2*b3_b4+b4_2*b3*a2_a3*a4_b1+b4_3*b3*a2_a4-2*a4_2*b4_2*b2_b3-b1_2*a4_2*b4_2*a3-b3_2*b4_2*a3_a4+b4_3*a1_a3*a4_b1)*x2+(a4_3*b1_2*b2_b4+b4_3*a1_a2*a4_b1-a4_2*b4_2*b2*a1_b1+b4_4*a4+b4_2*a3_a4*b2_b3+a4_2*b3_2*b4*a1_b1-b4_2*b3*a1_a3*a4_b1+a3_2*b1_2*b4_2*a4+2*a4_2*b4_2*b1_b3-a4_2*b3_2*b2_b4-b1_2*a4_2*b4_2*a2-b4_3*b2*a2_a4-b1_2*a4_2*b4*a3_b3+b2_2*a4_2*b4_2-2*b4_3*b1*a3_a4)*x3+(-b4_3*a1_2*a4_b1-a4_2*b4*a1_b1*b2_b3-2*a4_2*b4_2*b1_b2-b4_2*b1_2*a4*a2_a3+2*b4_2*a4_2*b1_2*a1+b4_3*b2*a1_a4-b4_3*a4_b3-a4_2*b3_2*b1_b4-a4_3*b1_3*b4+b4_2*b2*a1_a3*a4_b1+b4_2*a3_a4*b1_b3+b4_3*b1*a2_a4-b2_2*b4_2*a3_a4+a4_2*b1_2*b4*a2_b3+a4_2*b2_2*b3_b4)*x4+(-a4_2*b1_2*b4_2+a4_2*b2_2*b4*a1_b1+a2_2*b1_2*b4_2*a4+2*a4_2*b1_b2*b3_b4+b4_3*b1*a1_a4-a4_2*b2_3*b4+b4_2*a3_a4*b1_b2-b4_3*a4_b2-b1_2*b4_2*a4*a1_a3+b1_3*a4_2*a3_b4-a4_2*b1_2*b4*a2_b2-2*b4_2*a2_a4*b1_b3+b3_2*b4_2*a4+a1_2*b4_2*b3*a4_b1+b2_2*b4_2*a2_a4-b4_2*a1_a4*b2_b3-b4_2*b2*a1_a2*a4_b1-a4_2*b1_2*b4*a1_b3)*x5+(-3*a3_a4*b1_b2*b3_b4-b4_3*a4_b1-b1_2*b4_2*a4*a1_a2-a4_2*b1_2*b3_b4+b4*a1_a2*a4_b1*b2_b3-b4_2*a1_a4*b1_b3-b3_3*a4_b4+2*b1_2*b4_2*a3_a4+2*b1_2*b4*a1_a3*a4_b3+b1_3*a4_2*a2_b4-b2_2*a2_a4*b3_b4+b3_2*a1_a4*b2_b4-a4_2*b1_2*b4*a1_b2+b1_2*b4*a2_a3*a4_b2-a1_2*b3_2*b4*a4_b1-a2_2*b1_2*b4*a4_b3-b2_2*b4*a1_a3*a4_b1+2*b4_2*b3*a4_b2+b2_3*b4*a3_a4-b2_2*b4_2*a1_a4+2*b3_2*a2_a4*b1_b4+a1_2*b4_2*b2*a4_b1-a3_2*b1_3*a4_b4+a4_2*b2_2*b1_b4)*x6+(3*a3_2*b1_b2*b3_b4+b2_2*a2_a3*b3_b4+a3_3*b1_3*b4-2*b3_2*a2_a3*b1_b4-a3_2*b2_3*b4-b3_2*a1_a3*b2_b4-b2_2*a3_a4*b1_b4+2*b2_2*b4_2*a1_a3+a1_3*b4_3*b1-b2_2*a1_a4*b3_b4+a4_2*b1_3*a1_b4-3*a3_2*b1_2*b4_2-b4_4+a2_2*b4_2*b2*a1_b1+a2_2*b1_2*b4*a4_b2-a1_2*b4_2*b3*a2_b1-b2_2*b4*a1_a2*a4_b1+2*b4_3*a2_b2+3*b4_3*a3_b1+b4_3*a1_b3+2*b1_2*b4_2*a2_a4+3*b4_2*a1_a4*b1_b2+b3_2*b4*a4_b2-2*b4_2*b3*a4_b1+2*b1_2*a3_a4*b3_b4-3*b4_3*b1*a1_a2-a4_2*b1_2*b2_b4+b4_2*a1_a3*b1_b3-3*b4_2*b3*a3_b2+b3_3*a3_b4+a3_2*b2_2*b4*a1_b1+b1_2*b4*a1_a3*a4_b2+a1_2*b3_2*b4*a3_b1-a3_2*b1_2*b4*a2_b2-b4*a1_a2*a3_b1*b2_b3-2*a3_2*b1_2*b4*a1_b3+b1_2*a2_2*b4*a3_b3+3*b1_2*b4_2*a3*a1_a2-2*a1_2*b1_2*b4_2*a4-2*a1_2*b4_2*b2*a3_b1+a1_2*b4*a4_b1*b2_b3-a1_2*b4_3*b2-b2_2*b4_2*a4-2*a2_a4*b1_b2*b3_b4-b4_2*a2_a3*b1_b2-a2_3*b1_2*b4_2-a2_2*b2_2*b4_2-b3_2*b4_2*a2+2*a2_2*b4_2*b1_b3+b4_2*a1_a2*b2_b3-2*b1_3*a2_a3*a4_b4+b2_3*b4*a2_a4)*x7+(-a1_2*b3_3*a3_b1+3*a3_2*b1_2*b3_b4-2*b2_2*a1_a3*b3_b4+2*b1_3*a2_a3*a4_b3-a3_3*b1_3*b3-b1_4*a4_2*a3+a3_2*b2_3*b3-2*b1_2*b3_2*a3_a4+b3_3*b2*a1_a3+a3_2*b1_3*a4_b2-3*a3_2*b3_2*b1_b2-b3_2*a1_a3*b1_b4+4*b2_2*a3_a4*b1_b3-b2_2*b3_2*a2_a3+2*b3_3*b1*a2_a3-3*b1_2*a3_a4*b2_b4+b2_3*a1_a3*a4_b1+3*b3_2*b4*a3_b2-b3_2*b4_2*a1+a1_2*b4_2*b2_b3-a1_3*b4_2*b1_b3+3*b4_2*a1_a2*b1_b3+b1_3*a1_a3*a4_b4+b2_3*b4*a1_a4+a1_2*b3_2*b4*a2_b1-3*b1_2*b4*a1_a2*a3_b3-a2_2*b4*a1_b1*b2_b3+2*b4_2*b2*a4_b1-b2_2*b4*a4_b3-b1_2*b4_2*a1_a4-a1_a4*b1_b2*b3_b4-3*b4_2*b3*a3_b1+b3_2*b4*a4_b1+b3_3*a2_b4-b2_4*a3_a4-b3_4*a3-a3_2*b2_2*b3*a1_b1+b3_2*b2*a1_a2*a3_b1-b1_2*a2_2*b3_2*a3+2*a3_2*b1_2*b3_2*a1-3*b1_2*b3*a1_a3*a4_b2+a3_2*b1_2*b3*a2_b2-b1_2*b2_2*a4*a2_a3+2*a1_2*b4*a3_b1*b2_b3+a1_2*b1_2*b4*a4_b3+2*b1_2*b4*a1_a2*a4_b2-a1_2*b2_2*b4*a4_b1+b4_3*b3+a2_a3*b1_b2*b3_b4+a2_3*b1_2*b3_b4+a2_2*b2_2*b3_b4-b2_2*a2_a4*b1_b4-a2_2*b1_3*a4_b4-2*a2_2*b3_2*b1_b4-2*b4_2*b3*a2_b2-b3_2*a1_a2*b2_b4+a4_2*b1_3*b4)*x8; float num5 = x8; float num6 = (2*b4_4*a3_b1+b2_2*b4_2*b3*a2_a3-b3_2*b4_2*b1*a2_a3-b2_2*b3_2*b4*a2_a4-b4_5-3*b2_2*b4_2*b3*a1_a4-3*b4_3*b3*a4_b1+4*b3_2*b4_2*a4_b2-a4_2*b2_4*b4-a3_2*b2_3*b4_2+b3_3*b4_2*a3-2*b2_2*b4_3*a4-a2_2*b2_2*b4_3-a3_2*b1_2*b4_3-b3_2*b4_3*a2-a1_2*b4_4*b2+2*b2_2*b4_3*a1_a3+b4_4*a1_b3+2*b4_4*a2_b2-a4_2*b1_2*b3_2*b4-2*a4_2*b1_2*b4_2*b2-3*b4_3*b3*a3_b2+2*b1_2*b4_2*b3*a3_a4-b2_2*b4_2*b1*a3_a4-b4_3*a2_a3*b1_b2+3*b4_3*a1_a4*b1_b2+a2_2*b4_3*b1_b3+b3_3*a2_a4*b1_b4-b3_2*b4_2*b2*a1_a3-2*b3_2*b4*a3_a4*b1_b2-2*b4_2*b3*a2_a4*b1_b2+2*a3_2*b4_2*b3*b1_b2-b3_4*a4_b4+3*a4_2*b2_2*b4*b1_b3-b4_4*b1*a1_a2+b4_3*a1_a2*b2_b3+b3_3*a1_a4*b2_b4+b2_3*a3_a4*b3_b4+2*b2_3*b4_2*a2_a4+b1_2*b4_3*a2_a4)*x1+(a3_2*b2_2*b4_2*b1-2*b1_2*b4_3*a1_a4-b4_3*a1_a2*b1_b3-2*b4_3*a1_a3*b1_b2+a4_2*b2_3*b1_b4+a2_2*b4_3*b1_b2+b3_2*b4_2*b1*a1_a3-a3_2*b1_2*b4_2*b3+a4_2*b1_3*b4_2-b4_4*a2_b1-2*a4_2*b1_2*b4*b2_b3-b4_2*b3*a2_a3*b1_b2+3*b4_2*b3*a1_a4*b1_b2+a1_2*b4_4*b1-b2_2*b4*a3_a4*b1_b3+b1_2*b4_3*a2_a3+b3_2*b4*a2_a4*b1_b2-2*b2_2*b4_2*b1*a2_a4+b4_3*b3*a3_b1-b3_2*b4_2*a4_b1+b4_3*b2*a4_b1-b3_3*a1_a4*b1_b4+b1_2*b3_2*b4*a3_a4+b1_2*b4_2*b2*a3_a4)*x2+(-a4_2*b1_2*b2_2*b4+b1_2*b4_2*b3*a2_a3-2*b4_2*a4_b1*b2_b3-a3_2*b1_2*b4_2*b2-a2_2*b1_2*b4_3+a4_2*b1_3*b3_b4+b3_3*b4*a4_b1-b1_2*b3_2*b4*a2_a4-b1_2*b4_2*b3*a1_a4+b1_2*b4_3*a4+b1_2*b4_3*a1_a3+2*b1_2*b4_2*b2*a2_a4+b4_3*b2*a3_b1+b1_2*b4*a3_a4*b2_b3-b4_4*a1_b1-b3_2*b4_2*a3_b1+b4_3*b3*a2_b1-b1_3*b4_2*a3_a4)*x3+(-b4_3*b2*a2_b1+b4_4*b1-b1_2*b4_2*b3*a1_a3+2*b1_2*b4_2*a4_b3+b4_2*a3_b1*b2_b3+a4_2*b1_3*b2_b4+b1_2*b3_2*b4*a1_a4+b1_2*b4_3*a1_a2-2*b1_2*b4_3*a3-b1_3*b4_2*a2_a4-b3_2*a4_b1*b2_b4-b1_3*a3_a4*b3_b4+a3_2*b1_3*b4_2+b2_2*b4_2*a4_b1-b1_2*b4_2*b2*a1_a4)*x4+(-a4_2*b1_4*b4-b1_2*b3_2*a4_b4-2*b1_2*b4_2*a4_b2-b2_2*b4_2*a3_b1+b1_2*b4_2*b2*a1_a3-b1_3*b4_2*a2_a3-b4_3*b1_b3+b1_2*b4_2*a3_b3-b1_2*b4*a1_a4*b2_b3-a1_2*b1_2*b4_3+b1_2*b4_3*a2+b1_3*a2_a4*b3_b4+b2_2*a4_b1*b3_b4+2*b1_3*b4_2*a1_a4+b4_3*b2*a1_b1)*x5+(b1_2*b4_3*a1-b1_2*b4_2*b2*a1_a2+b1_2*b2_2*b4*a1_a4+b1_2*b4_2*a3_b2-b1_3*a1_a4*b3_b4-2*b1_2*b4_2*a2_b3+b2_2*b4_2*a2_b1-b1_3*b4_2*a1_a3+a1_2*b1_2*b4_2*b3+2*b1_2*a4_b2*b3_b4-b2_3*b4*a4_b1-b4_2*a1_b1*b2_b3-b1_3*b4_2*a4-b1_3*a2_a4*b2_b4+a2_2*b1_3*b4_2-b4_3*b1_b2+b3_2*b4_2*b1+b1_4*b4*a3_a4)*x6+(-a2_2*b1_3*b3_b4-b1_2*b4_2*a1_b3-a1_2*b1_2*b3_2*b4+a1_2*b1_2*b4_2*b2-a3_2*b1_4*b4+2*b1_3*b4_2*a3-b1_3*b4*a4_b3+b2_3*b4*a3_b1+b1_2*b4*a1_a2*b2_b3+b1_2*b2_2*a4_b4-b3_3*b1_b4+b1_4*b4*a2_a4+2*b4_2*b3*b1_b2-b1_2*b2_2*b4*a1_a3+2*b1_2*b3_2*a2_b4-b4_2*b2_2*a1_b1-b1_3*b4_2*a1_a2-b2_2*a2_b1*b3_b4+b3_2*a1_b1*b2_b4+b1_3*a2_a3*b2_b4-b1_3*a1_a4*b2_b4-3*b1_2*a3_b2*b3_b4+2*b1_3*a1_a3*b3_b4-b1_2*b4_3)*x7+(a4_2*b1_5+b3_4*b1+b2_4*a4_b1+b1_4*b4*a2_a3-2*b1_2*b4_2*a1_b2-b2_3*b3*a3_b1-2*b1_4*b3*a2_a4-b1_3*a2_a3*b2_b3+b1_3*a1_a2*b3_b4-b3_3*b2*a1_b1+b1_3*b2_2*a2_a4-3*b1_3*b4*a3_b3-2*b1_4*b4*a1_a4-b1_2*b2_3*a1_a4+3*b1_3*b4*a4_b2+a3_2*b1_4*b3-4*b1_2*b2_2*a4_b3+2*b1_3*b3_2*a4+a2_2*b1_3*b3_2-2*b1_2*b3_3*a2+a1_2*b1_2*b3_3+3*b1_2*b3_2*a3_b2-b1_3*b4_2*a2+a1_2*b1_3*b4_2+3*b1_3*a1_a4*b2_b3-b2_3*b4*a2_b1+b2_2*b3_2*a2_b1+2*b2_2*a1_b1*b3_b4+2*b1_2*a2_b2*b3_b4-3*b3_2*b4*b1_b2+b1_2*b3_2*a1_b4-a2_2*b1_3*b2_b4-2*b1_3*b3_2*a1_a3-b1_4*b2*a3_a4+2*b1_2*b4_2*b3+b2_2*b4_2*b1-2*a1_2*b1_2*b4*b2_b3+b1_2*b2_2*b3*a1_a3+b1_2*b2_2*b4*a1_a2-b1_2*b3_2*b2*a1_a2)*x8; float num7 = (-b4_4*a4_b1+b4_5*a1-b4_4*a3_b2+b4_3*b3*a4_b2+b1_2*b4_3*a3_a4+b3_2*b4_3*a1_a2-2*b4_3*a2_a3*b1_b3+3*b4_3*a1_a4*b1_b3-b4_4*b1*a1_a3-b3_3*b4_2*a1_a3-2*b4_3*a2_a4*b1_b2+a3_2*b4_3*b1_b2-a1_2*b4_4*b3+a2_2*b4_4*b1+b3_4*b4*a1_a4-b3_3*a3_a4*b1_b4-a4_2*b2_3*b3_b4-b3_3*a2_a4*b2_b4-a2_2*b4_3*b2_b3+2*b4_3*a1_a3*b2_b3+2*b2_2*b4_2*b3*a2_a4+b3_2*b4_2*b1*a2_a4-2*a4_2*b1_2*b4_2*b3-a3_2*b2_2*b4_2*b3+a4_2*b2_2*b4_2*b1+a3_2*b3_2*b4_2*b1+2*a4_2*b3_2*b4*b1_b2+b3_2*b4_2*b2*a2_a3+b2_2*b3_2*b4*a3_a4-3*b3_2*b4_2*b2*a1_a4-2*b4_2*b3*a3_a4*b1_b2)*x1+(2*b4_4*a3_b1-b3_2*b4_2*b1*a2_a3-b4_5-3*b4_3*b3*a4_b1+3*b3_2*b4_2*a4_b2+b3_3*b4_2*a3-b2_2*b4_3*a4-a3_2*b1_2*b4_3-b3_2*b4_3*a2+b4_4*a1_b3+b4_4*a2_b2-a4_2*b1_2*b3_2*b4-a4_2*b1_2*b4_2*b2-2*b4_3*b3*a3_b2+2*b1_2*b4_2*b3*a3_a4+b4_3*a1_a4*b1_b2+a2_2*b4_3*b1_b3+b3_3*a2_a4*b1_b4-b3_2*b4*a3_a4*b1_b2-2*b4_2*b3*a2_a4*b1_b2+a3_2*b4_2*b3*b1_b2-b3_4*a4_b4+a4_2*b2_2*b4*b1_b3-b4_4*b1*a1_a2+b1_2*b4_3*a2_a4)*x2+(b4_3*b3*a3_b1-2*b1_2*b4_3*a1_a4+b2_2*b4_3*a3-b4_3*a1_a2*b1_b3+b3_2*b4_2*b1*a1_a3+2*b4_2*b3*a1_a4*b1_b2-b3_2*b4_2*a3_b2-b4_3*a1_a3*b1_b2-b3_3*a1_a4*b1_b4+a4_2*b1_3*b4_2-b3_2*b4_2*a4_b1+b3_3*b4*a4_b2-2*b2_2*b4_2*a4_b3+a1_2*b4_4*b1+b4_3*b3*a2_b2-a4_2*b1_2*b4*b2_b3+b1_2*b3_2*b4*a3_a4-a3_2*b1_2*b4_2*b3-b4_4*a2_b1+b1_2*b4_3*a2_a3-b4_4*a1_b2+2*b4_3*b2*a4_b1)*x3+(b4_3*b3*a2_b1+b4_4*b2-a2_2*b1_2*b4_3-b3_2*b4_2*a3_b1+a4_2*b1_3*b3_b4+b4_3*a1_a2*b1_b2+b2_2*b4_2*a3_b3+b1_2*b4_3*a1_a3-b2_2*b3_2*a4_b4-b4_3*b2*a3_b1-b2_2*b4_3*a2+b3_2*b4*a1_a4*b1_b2+b1_2*b4_2*b3*a2_a3-b1_2*b4_2*b3*a1_a4-b2_2*b4_2*b1*a1_a4+b2_3*b4_2*a4-b1_3*b4_2*a3_a4-b4_4*a1_b1+b1_2*b4_2*b2*a2_a4+b3_3*b4*a4_b1-b4_2*b3*a1_a3*b1_b2+b1_2*b4_3*a4-b1_2*b3_2*b4*a2_a4)*x4+(b1_2*b4*a2_a4*b2_b3-a1_2*b4_3*b1_b2+a3_2*b1_3*b4_2-b2_2*b4*a1_a4*b1_b3-b1_3*b4_2*a2_a4+b2_3*b4*a4_b3-b4_3*b2_b3-2*b1_2*b4_3*a3+b1_2*b4_2*b2*a1_a4+2*b1_2*b4_2*a4_b3-2*b3_2*a4_b1*b2_b4+2*b4_2*a3_b1*b2_b3-b1_3*a3_a4*b3_b4-b2_2*b4_2*a4_b1-b2_3*b4_2*a3+b1_2*b3_2*b4*a1_a4+b4_4*b1+b2_2*b4_3*a1-b1_2*b4_2*b3*a1_a3+b2_2*b4_2*b1*a1_a3-b1_2*b4_2*b2*a2_a3+b1_2*b4_3*a1_a2)*x5+(-2*b1_2*b4*a1_a4*b2_b3+a2_2*b1_2*b4_2*b2+b2_3*b4_2*a2-a1_2*b1_2*b4_3+b1_2*b4_3*a2-b4_3*b1_b3-b2_4*a4_b4+2*b4_3*b2*a1_b1+3*b2_2*a4_b1*b3_b4+2*b1_3*b4_2*a1_a4+b1_2*b4_2*a3_b3-a4_2*b1_4*b4-3*b1_2*b4_2*a4_b2-b1_2*b3_2*a4_b4+b1_3*a2_a4*b3_b4+a1_2*b4_2*b3*b1_b2-b1_2*b2_2*b4*a2_a4+b3_2*b4_2*b2-b2_2*b4_2*a1_b3+b1_3*a3_a4*b2_b4-2*b4_2*a2_b1*b2_b3+b2_3*a1_a4*b1_b4-b2_2*b4_2*b1*a1_a2-b2_2*b4_3-b1_3*b4_2*a2_a3)*x6+(a1_2*b1_2*b4_2*b3-2*b1_2*b4_2*b2*a1_a2+2*b2_2*b4_2*b3+b3_2*b4_2*b1-2*b4_3*b1_b2-b3_3*b2_b4+b2_4*a3_b4-b1_3*a1_a4*b3_b4+3*b1_2*b4_2*a3_b2+a2_2*b1_3*b4_2+b1_2*b4_3*a1+b1_2*a4_b2*b3_b4-2*b4_2*a1_b1*b2_b3+b2_2*b4_2*a2_b1-b1_3*b4_2*a1_a3-2*b1_2*b4_2*a2_b3+b1_4*b4*a3_a4+b1_2*b2_2*b4*a2_a3+b2_2*b4*a1_a2*b1_b3+a1_2*b2_2*b4_2*b1-a1_2*b3_2*b4*b1_b2+2*b1_2*b4*a1_a3*b2_b3-a2_2*b1_2*b4*b2_b3-a3_2*b1_3*b2_b4-b2_3*b4_2*a1+b2_2*b3_2*a1_b4-3*b2_2*a3_b1*b3_b4+2*b3_2*a2_b1*b2_b4-b2_3*b4*a2_b3-b2_3*a1_a3*b1_b4-b1_3*b4_2*a4)*x7+(-a2_2*b1_2*b2_2*b4+a2_2*b1_2*b3_2*b2-2*a1_2*b2_2*b4*b1_b3-b3_3*b1_b4+b2_5*a4+b3_4*b2-b2_4*a3_b3-b2_4*a2_b4-3*b4_2*b2_2*a1_b1+b2_3*b4*a3_b1+b1_4*b4*a2_a4-a3_2*b1_4*b4-b1_3*b4*a4_b3+2*b1_3*b4_2*a3-a2_2*b1_3*b3_b4-b1_2*b4_2*a1_b3+b2_2*a2_b1*b3_b4+4*b4_2*b3*b1_b2+4*b1_2*b2_2*a4_b4+2*b1_2*b3_2*a2_b4-b1_3*b4_2*a1_a2+2*b3_2*a1_b1*b2_b4+2*b1_3*a2_a3*b2_b4-3*b1_3*a1_a4*b2_b4-6*b1_2*a3_b2*b3_b4+2*b1_3*a1_a3*b3_b4-a1_2*b1_2*b3_2*b4+2*a1_2*b1_2*b4_2*b2+2*b1_2*b4*a1_a2*b2_b3-b1_2*b2_2*b4*a1_a3-2*b1_2*b3_2*b2*a1_a3-b1_2*b2_2*b3*a2_a3+3*b1_2*b2_2*b3*a1_a4-b2_2*b3_2*b1*a1_a2+b2_3*b4_2+b2_3*a1_a2*b1_b4+2*b1_2*b3_2*a4_b2+a1_2*b3_3*b1_b2+a4_2*b1_4*b2-b1_3*b2_2*a3_a4+b2_3*b3_2*a2-b2_2*b3_3*a1-b2_4*b1*a1_a4-2*b3_3*b2*a2_b1+b1_2*b2_3*a2_a4+2*b2_3*b4*a1_b3-2*b1_3*a2_a4*b2_b3+a3_2*b1_3*b2_b3-b1_2*b4_2*a2_b2-4*b2_3*b3*a4_b1+3*b2_2*b3_2*a3_b1+b2_3*a1_a3*b1_b3-b1_2*b4_3-3*b2_2*b3_2*b4)*x8; float num8 = (-a4_2*b2_3*b4_2+b3_2*b4_3*a4+2*b4_4*b2*a1_a3-b4_4*a4_b2+b2_2*b4_2*b3*a3_a4-b3_2*b4_2*b2*a2_a4-a1_2*b4_5+2*a4_2*b4_2*b3*b1_b2+b4_5*a2-b4_4*a3_b3+a3_2*b4_3*b1_b3-b4_3*a3_a4*b1_b2-b3_2*b4_3*a1_a3+2*b2_2*b4_3*a2_a4-b3_2*b4_2*b1*a3_a4-a4_2*b1_2*b4_3-a3_2*b2_2*b4_3+b4_3*a2_a3*b2_b3+b3_3*b4_2*a1_a4-b4_4*b1*a2_a3+2*b4_4*b1*a1_a4-a2_2*b4_4*b2-3*b4_3*a1_a4*b2_b3+b4_4*b3*a1_a2)*x1+(-b4_4*b1*a1_a3+b3_2*b4_2*b1*a2_a4+2*b4_3*b3*a4_b2-a4_2*b1_2*b4_2*b3-b4_2*b3*a3_a4*b1_b2-b4_4*a2_b3+a3_2*b4_3*b1_b2-b4_4*a3_b2+b4_3*a1_a4*b1_b3-b4_3*a2_a3*b1_b3+a4_2*b2_2*b4_2*b1+b3_2*b4_3*a3-b3_3*b4_2*a4+a2_2*b4_4*b1-b4_4*a4_b1-2*b4_3*a2_a4*b1_b2+b4_5*a1+b1_2*b4_3*a3_a4)*x2+(-b2_2*b4_3*a4+b4_3*a1_a4*b1_b2-b4_4*b1*a1_a2-b3_2*b4_2*b1*a1_a4+b3_2*b4_2*a4_b2+b4_3*a1_a3*b1_b3+b1_2*b4_3*a2_a4+2*b4_4*a3_b1-a4_2*b1_2*b4_2*b2-2*b4_3*b3*a4_b1+b4_4*a2_b2-b4_3*b3*a3_b2-a3_2*b1_2*b4_3+b1_2*b4_2*b3*a3_a4-b4_5)*x3+(-b2_2*b4_2*a4_b3-b4_3*b3*a3_b1+a1_2*b4_4*b1-b1_2*b4_2*b3*a2_a4+2*b4_3*b2*a4_b1-b4_4*a1_b2+b3_2*b4_2*a4_b1-2*b1_2*b4_3*a1_a4+b4_2*b3*a1_a4*b1_b2+b4_4*b3-b4_4*a2_b1+a4_2*b1_3*b4_2+b1_2*b4_3*a2_a3+b2_2*b4_3*a3-b4_3*a1_a3*b1_b2)*x4+(-b2_2*b4_2*b1*a1_a4-b4_4*a1_b1-a1_2*b4_3*b1_b3+b1_2*b4_2*b3*a1_a4+b4_3*b3*a1_b2-a2_2*b1_2*b4_3+b2_3*b4_2*a4+b1_2*b4_2*b2*a2_a4-b3_2*b4_3+b1_2*b4_3*a1_a3-b4_3*b2*a3_b1+b1_2*b4_3*a4-b2_2*b4_3*a2-2*b4_2*a4_b1*b2_b3+b4_4*b2+b4_3*a1_a2*b1_b2+2*b4_3*b3*a2_b1-b1_3*b4_2*a3_a4)*x5+(b3_3*b4_2+3*b4_2*a3_b1*b2_b3-2*b3_2*b4_2*a2_b1-b4_2*b3*a1_a2*b1_b2-2*b1_2*b4_2*b3*a1_a3-a1_2*b4_3*b1_b2+b2_2*b4_3*a1-b2_3*b4_2*a3+b1_2*b4_2*a4_b3+b2_2*b4_2*b1*a1_a3+b4_4*b1+b4_3*b3*a1_b1-2*b1_2*b4_3*a3-2*b4_3*b2_b3+b2_2*b4_2*a2_b3-b3_2*b4_2*a1_b2+a3_2*b1_3*b4_2+a2_2*b1_2*b4_2*b3+b1_2*b4_2*b2*a1_a4+a1_2*b3_2*b4_2*b1-b1_3*b4_2*a2_a4+b1_2*b4_3*a1_a2-b1_2*b4_2*b2*a2_a3-b2_2*b4_2*a4_b1)*x6+(-3*b1_2*b4*a1_a4*b2_b3-b3_4*b4+2*b1_2*b3_2*b4*a1_a3-b2_2*b3_2*a2_b4+b3_3*b4*a1_b2-a1_2*b3_3*b1_b4-a3_2*b1_3*b3_b4-3*b3_2*a3_b1*b2_b4-a2_2*b1_2*b3_2*b4+a2_2*b1_2*b4_2*b2-b2_2*b4*a1_a3*b1_b3+b3_2*b4*a1_a2*b1_b2+b1_2*b4*a2_a3*b2_b3+b2_3*b4_2*a2-a1_2*b1_2*b4_3+b1_2*b4_3*a2-2*b4_3*b1_b3-b2_4*a4_b4+2*b4_3*b2*a1_b1+4*b2_2*a4_b1*b3_b4+2*b1_3*b4_2*a1_a4+3*b1_2*b4_2*a3_b3-a4_2*b1_4*b4-3*b1_2*b4_2*a4_b2-2*b1_2*b3_2*a4_b4+2*b1_3*a2_a4*b3_b4+2*a1_2*b4_2*b3*b1_b2-b1_2*b2_2*b4*a2_a4+3*b3_2*b4_2*b2-2*b2_2*b4_2*a1_b3+b1_3*a3_a4*b2_b4-2*b4_2*a2_b1*b2_b3+b2_3*a1_a4*b1_b4-b2_2*b4_2*b1*a1_a2-b1_2*b4_2*b3*a1_a2+b2_3*b4*a3_b3-b3_2*b4_2*a1_b1+2*b3_3*b4*a2_b1-b2_2*b4_3-b1_3*b4_2*a2_a3)*x7+(2*a1_2*b1_2*b4_2*b3-2*b1_2*b4_2*b2*a1_a2+b3_5+b2_2*b3_2*b1*a1_a3+b1_2*b3_2*b4*a1_a2-b1_2*b3_2*b2*a2_a3+b1_2*b2_2*b3*a2_a4+3*b1_2*b3_2*b2*a1_a4+3*b2_2*b4_2*b3+3*b3_2*b4_2*b1-2*b4_3*b1_b2-4*b3_3*b2_b4+b2_4*a3_b4-2*b3_4*a2_b1+b2_4*a4_b3-b3_4*a1_b2-3*b1_3*a1_a4*b3_b4+3*b1_2*b4_2*a3_b2+a2_2*b1_3*b4_2+b1_2*b4_3*a1+4*b1_2*a4_b2*b3_b4-4*b4_2*a1_b1*b2_b3+b2_2*b4_2*a2_b1-b1_3*b4_2*a1_a3-3*b1_2*b4_2*a2_b3+b1_4*b4*a3_a4+b1_2*b2_2*b4*a2_a3+2*b2_2*b4*a1_a2*b1_b3+a1_2*b2_2*b4_2*b1-3*a1_2*b3_2*b4*b1_b2+2*b1_2*b4*a1_a3*b2_b3-2*a2_2*b1_2*b4*b2_b3-a3_2*b1_3*b2_b4-b2_3*b4_2*a1+3*b2_2*b3_2*a1_b4-3*b2_2*a3_b1*b3_b4+4*b3_2*a2_b1*b2_b4-2*b2_3*b4*a2_b3-b2_3*a1_a3*b1_b4-3*b1_2*b3_2*a3_b4-4*b2_2*b3_2*a4_b1-b2_3*a1_a4*b1_b3+b1_3*a2_a3*b3_b4+a4_2*b1_4*b3-2*b1_3*b3_2*a2_a4+a3_2*b1_3*b3_2-b2_3*b3_2*a3+2*b1_2*b3_3*a4+a2_2*b1_2*b3_3+b2_2*b3_3*a2+a1_2*b3_4*b1+3*b3_3*b2*a3_b1+b3_3*b4*a1_b1-2*b1_2*b3_3*a1_a3-b1_3*a3_a4*b2_b3-b3_3*a1_a2*b1_b2-b1_3*b4_2*a4)*x8; float den1 = 3*b4_4*a3_b1-3*b1_3*b4_2*a4*a2_a3+b2_2*b4_2*b3*a2_a3-2*b3_2*b4_2*b1*a2_a3-b2_2*b3_2*b4*a2_a4-a1_2*b4_3*b3*a2_b1-a3_2*b1_2*b4_2*a2_b2+2*a4_2*b1_3*b4*a2_b3-2*b2_2*b4_2*a1_a2*a4_b1-a1_2*b3_3*b4*a4_b1-b4_5-b3_2*b4_2*b1*a1_a4+a4_2*b2_3*b4*a1_b1-b2_2*a1_a3*a4_b1*b3_b4-3*a4_2*b1_2*a1_b2*b3_b4+b1_2*a2_a3*a4_b2*b3_b4-3*b2_2*b4_2*b3*a1_a4-4*b4_3*b3*a4_b1+4*b3_2*b4_2*a4_b2-b4_2*a1_a2*a3_b1*b2_b3+a2_2*b1_2*b4_2*a3_b3+3*b1_2*b4_3*a3*a1_a2-a4_3*b1_4*b4-a4_2*b2_4*b4-a3_2*b2_3*b4_2+a3_3*b1_3*b4_2+b3_3*b4_2*a3-2*b2_2*b4_3*a4-a2_2*b2_2*b4_3-3*a3_2*b1_2*b4_3-a2_3*b1_2*b4_3-b3_2*b4_3*a2-a1_2*b4_4*b2+a1_3*b4_4*b1+2*b2_2*b4_3*a1_a3+b4_4*a1_b3+2*b4_4*a2_b2-2*a4_2*b1_2*b3_2*b4-4*a4_2*b1_2*b4_2*b2+3*a4_2*b1_3*b4_2*a1-3*a1_2*b1_2*b4_3*a4+3*a1_2*b4_2*a4_b1*b2_b3+b3_2*a1_a2*a4_b1*b2_b4-3*b4_3*b3*a3_b2+a1_2*b3_2*b4_2*a3_b1-2*a1_2*b4_3*b2*a3_b1+a4_2*b1_3*b4*a3_b2-a4_2*b1_2*b2_2*a2_b4+5*b1_2*b4_2*b3*a3_a4-b2_2*b4_2*b1*a3_a4-b4_3*a2_a3*b1_b2+5*b4_3*a1_a4*b1_b2+2*a2_2*b4_3*b1_b3+b4_3*a1_a3*b1_b3+2*b3_3*a2_a4*b1_b4-b3_2*b4_2*b2*a1_a3-a2_2*b1_2*b3_2*a4_b4+2*b1_2*b3_2*a1_a3*a4_b4-3*b3_2*b4*a3_a4*b1_b2-4*b4_2*b3*a2_a4*b1_b2+3*a3_2*b4_2*b3*b1_b2-b3_4*a4_b4+4*a4_2*b2_2*b4*b1_b3+a3_2*b2_2*b4_2*a1_b1+a2_2*b4_3*b2*a1_b1-3*b4_4*b1*a1_a2+b4_3*a1_a2*b2_b3+b3_3*a1_a4*b2_b4+b2_3*a3_a4*b3_b4+2*a2_2*b1_2*b4_2*a4_b2+b1_2*b4_2*a1_a3*a4_b2-a3_2*b1_3*b4*a4_b3-b1_2*b4_2*a1_a2*a4_b3-2*a3_2*b1_2*b4_2*a1_b3+2*b2_3*b4_2*a2_a4+3*b1_2*b4_3*a2_a4; float den2 = b4; float q0 = num1/den1; float q1 = num2/den1; float q2 = num3/den1; float q3 = num4/den1; float q4 = num5/den2; float p1 = num6/den1; float p2 = num7/den1; float p3 = num8/den1; }
Thanks for any sugestions.
Grzegorz