\frac{\cos th}{\sqrt{2}} \cdot \left(a1 \cdot a1\right) + \frac{\cos th}{\sqrt{2}} \cdot \left(a2 \cdot a2\right)\frac{\frac{\cos th}{\sqrt{\sqrt{2}}}}{\sqrt{\sqrt{2}}} \cdot \left(a1 \cdot a1\right) + \left(\left(\frac{\cos th}{\sqrt{\left|\sqrt[3]{2}\right|}} \cdot \frac{\frac{1}{\sqrt{\sqrt{2}}}}{\sqrt{\sqrt{\sqrt[3]{2}}}}\right) \cdot a2\right) \cdot a2double f(double a1, double a2, double th) {
double r85830 = th;
double r85831 = cos(r85830);
double r85832 = 2.0;
double r85833 = sqrt(r85832);
double r85834 = r85831 / r85833;
double r85835 = a1;
double r85836 = r85835 * r85835;
double r85837 = r85834 * r85836;
double r85838 = a2;
double r85839 = r85838 * r85838;
double r85840 = r85834 * r85839;
double r85841 = r85837 + r85840;
return r85841;
}
double f(double a1, double a2, double th) {
double r85842 = th;
double r85843 = cos(r85842);
double r85844 = 2.0;
double r85845 = sqrt(r85844);
double r85846 = sqrt(r85845);
double r85847 = r85843 / r85846;
double r85848 = r85847 / r85846;
double r85849 = a1;
double r85850 = r85849 * r85849;
double r85851 = r85848 * r85850;
double r85852 = cbrt(r85844);
double r85853 = fabs(r85852);
double r85854 = sqrt(r85853);
double r85855 = r85843 / r85854;
double r85856 = 1.0;
double r85857 = r85856 / r85846;
double r85858 = sqrt(r85852);
double r85859 = sqrt(r85858);
double r85860 = r85857 / r85859;
double r85861 = r85855 * r85860;
double r85862 = a2;
double r85863 = r85861 * r85862;
double r85864 = r85863 * r85862;
double r85865 = r85851 + r85864;
return r85865;
}



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-*r*0.5
rmApplied add-sqr-sqrt0.5
Applied sqrt-prod0.5
Applied associate-/r*0.5
rmApplied add-cube-cbrt0.5
Applied sqrt-prod0.5
Applied sqrt-prod0.5
Applied div-inv0.5
Applied times-frac0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2020045 +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))))