\frac{\cos th}{\sqrt{2}} \cdot \left(a1 \cdot a1\right) + \frac{\cos th}{\sqrt{2}} \cdot \left(a2 \cdot a2\right)\frac{\cos th}{\sqrt{\sqrt{\sqrt{2}}}} \cdot \frac{{a1}^{2}}{\sqrt{\sqrt{\sqrt{2}}} \cdot \sqrt{\sqrt{2}}} + \left(\cos th \cdot \frac{a2}{\sqrt{2}}\right) \cdot a2double f(double a1, double a2, double th) {
double r88194 = th;
double r88195 = cos(r88194);
double r88196 = 2.0;
double r88197 = sqrt(r88196);
double r88198 = r88195 / r88197;
double r88199 = a1;
double r88200 = r88199 * r88199;
double r88201 = r88198 * r88200;
double r88202 = a2;
double r88203 = r88202 * r88202;
double r88204 = r88198 * r88203;
double r88205 = r88201 + r88204;
return r88205;
}
double f(double a1, double a2, double th) {
double r88206 = th;
double r88207 = cos(r88206);
double r88208 = 2.0;
double r88209 = sqrt(r88208);
double r88210 = sqrt(r88209);
double r88211 = sqrt(r88210);
double r88212 = r88207 / r88211;
double r88213 = a1;
double r88214 = 2.0;
double r88215 = pow(r88213, r88214);
double r88216 = r88211 * r88210;
double r88217 = r88215 / r88216;
double r88218 = r88212 * r88217;
double r88219 = a2;
double r88220 = r88219 / r88209;
double r88221 = r88207 * r88220;
double r88222 = r88221 * r88219;
double r88223 = r88218 + r88222;
return r88223;
}



Bits error versus a1



Bits error versus a2



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