\frac{\cos th}{\sqrt{2}} \cdot \left(a1 \cdot a1\right) + \frac{\cos th}{\sqrt{2}} \cdot \left(a2 \cdot a2\right)\frac{\left(a2 \cdot a2\right) \cdot \cos th}{\sqrt{2}} + \frac{a1 \cdot a1}{\sqrt{\sqrt{2}}} \cdot \frac{\cos th}{\sqrt{\sqrt{2}}}double f(double a1, double a2, double th) {
double r3019074 = th;
double r3019075 = cos(r3019074);
double r3019076 = 2.0;
double r3019077 = sqrt(r3019076);
double r3019078 = r3019075 / r3019077;
double r3019079 = a1;
double r3019080 = r3019079 * r3019079;
double r3019081 = r3019078 * r3019080;
double r3019082 = a2;
double r3019083 = r3019082 * r3019082;
double r3019084 = r3019078 * r3019083;
double r3019085 = r3019081 + r3019084;
return r3019085;
}
double f(double a1, double a2, double th) {
double r3019086 = a2;
double r3019087 = r3019086 * r3019086;
double r3019088 = th;
double r3019089 = cos(r3019088);
double r3019090 = r3019087 * r3019089;
double r3019091 = 2.0;
double r3019092 = sqrt(r3019091);
double r3019093 = r3019090 / r3019092;
double r3019094 = a1;
double r3019095 = r3019094 * r3019094;
double r3019096 = sqrt(r3019092);
double r3019097 = r3019095 / r3019096;
double r3019098 = r3019089 / r3019096;
double r3019099 = r3019097 * r3019098;
double r3019100 = r3019093 + r3019099;
return r3019100;
}



Bits error versus a1



Bits error versus a2



Bits error versus th
Results
Initial program 0.5
rmApplied add-sqr-sqrt0.5
Applied sqrt-prod0.5
Applied associate-/r*0.5
rmApplied associate-*l/0.5
rmApplied div-inv0.7
Applied associate-*l*0.6
Simplified0.5
Final simplification0.5
herbie shell --seed 2019164 +o rules:numerics
(FPCore (a1 a2 th)
:name "Migdal et al, Equation (64)"
(+ (* (/ (cos th) (sqrt 2)) (* a1 a1)) (* (/ (cos th) (sqrt 2)) (* a2 a2))))