\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 \cdot \mathsf{hypot}\left(a1, a2\right)}{\frac{\sqrt[3]{\sqrt{2}} \cdot \sqrt[3]{\sqrt{2}}}{\mathsf{hypot}\left(a1, a2\right)}}}{\sqrt[3]{\sqrt{2}}}double f(double a1, double a2, double th) {
double r94022 = th;
double r94023 = cos(r94022);
double r94024 = 2.0;
double r94025 = sqrt(r94024);
double r94026 = r94023 / r94025;
double r94027 = a1;
double r94028 = r94027 * r94027;
double r94029 = r94026 * r94028;
double r94030 = a2;
double r94031 = r94030 * r94030;
double r94032 = r94026 * r94031;
double r94033 = r94029 + r94032;
return r94033;
}
double f(double a1, double a2, double th) {
double r94034 = th;
double r94035 = cos(r94034);
double r94036 = a1;
double r94037 = a2;
double r94038 = hypot(r94036, r94037);
double r94039 = r94035 * r94038;
double r94040 = 2.0;
double r94041 = sqrt(r94040);
double r94042 = cbrt(r94041);
double r94043 = r94042 * r94042;
double r94044 = r94043 / r94038;
double r94045 = r94039 / r94044;
double r94046 = r94045 / r94042;
return r94046;
}



Bits error versus a1



Bits error versus a2



Bits error versus th
Results
Initial program 0.5
Simplified0.5
rmApplied add-cube-cbrt0.5
Applied associate-/r*0.5
rmApplied add-sqr-sqrt0.5
Applied associate-*r*0.5
Simplified0.5
rmApplied associate-/l*0.5
Simplified0.4
Final simplification0.4
herbie shell --seed 2019325 +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))))