\frac{\cos th}{\sqrt{2}} \cdot \left(a1 \cdot a1\right) + \frac{\cos th}{\sqrt{2}} \cdot \left(a2 \cdot a2\right)\frac{\mathsf{fma}\left(a1, a1, a2 \cdot a2\right) \cdot \cos th}{\left|\sqrt[3]{\sqrt{2}}\right|} \cdot \frac{\frac{1}{\sqrt{\sqrt{2}}}}{\sqrt{\sqrt[3]{\sqrt{2}}}}double f(double a1, double a2, double th) {
double r89034 = th;
double r89035 = cos(r89034);
double r89036 = 2.0;
double r89037 = sqrt(r89036);
double r89038 = r89035 / r89037;
double r89039 = a1;
double r89040 = r89039 * r89039;
double r89041 = r89038 * r89040;
double r89042 = a2;
double r89043 = r89042 * r89042;
double r89044 = r89038 * r89043;
double r89045 = r89041 + r89044;
return r89045;
}
double f(double a1, double a2, double th) {
double r89046 = a1;
double r89047 = a2;
double r89048 = r89047 * r89047;
double r89049 = fma(r89046, r89046, r89048);
double r89050 = th;
double r89051 = cos(r89050);
double r89052 = r89049 * r89051;
double r89053 = 2.0;
double r89054 = sqrt(r89053);
double r89055 = cbrt(r89054);
double r89056 = fabs(r89055);
double r89057 = r89052 / r89056;
double r89058 = 1.0;
double r89059 = sqrt(r89054);
double r89060 = r89058 / r89059;
double r89061 = sqrt(r89055);
double r89062 = r89060 / r89061;
double r89063 = r89057 * r89062;
return r89063;
}



Bits error versus a1



Bits error versus a2



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