\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(\frac{\frac{\frac{\cos th}{\sqrt{\sqrt{2}}}}{\sqrt{\sqrt{\sqrt{2}}}}}{\sqrt{\sqrt{\sqrt{2}}}} \cdot a2\right) \cdot a2double f(double a1, double a2, double th) {
double r47883 = th;
double r47884 = cos(r47883);
double r47885 = 2.0;
double r47886 = sqrt(r47885);
double r47887 = r47884 / r47886;
double r47888 = a1;
double r47889 = r47888 * r47888;
double r47890 = r47887 * r47889;
double r47891 = a2;
double r47892 = r47891 * r47891;
double r47893 = r47887 * r47892;
double r47894 = r47890 + r47893;
return r47894;
}
double f(double a1, double a2, double th) {
double r47895 = th;
double r47896 = cos(r47895);
double r47897 = 2.0;
double r47898 = sqrt(r47897);
double r47899 = sqrt(r47898);
double r47900 = r47896 / r47899;
double r47901 = r47900 / r47899;
double r47902 = a1;
double r47903 = r47902 * r47902;
double r47904 = r47901 * r47903;
double r47905 = sqrt(r47899);
double r47906 = r47900 / r47905;
double r47907 = r47906 / r47905;
double r47908 = a2;
double r47909 = r47907 * r47908;
double r47910 = r47909 * r47908;
double r47911 = r47904 + r47910;
return r47911;
}



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-sqr-sqrt0.5
Applied sqrt-prod0.5
Applied sqrt-prod0.5
Applied associate-/r*0.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))))