\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 \cdot \mathsf{fma}\left(a1, a1, a2 \cdot a2\right)}{\sqrt{\sqrt{\sqrt{2}}}} \cdot \frac{\frac{1}{\sqrt{\sqrt{2}}}}{\sqrt{\sqrt{\sqrt{2}}}}double f(double a1, double a2, double th) {
double r106089 = th;
double r106090 = cos(r106089);
double r106091 = 2.0;
double r106092 = sqrt(r106091);
double r106093 = r106090 / r106092;
double r106094 = a1;
double r106095 = r106094 * r106094;
double r106096 = r106093 * r106095;
double r106097 = a2;
double r106098 = r106097 * r106097;
double r106099 = r106093 * r106098;
double r106100 = r106096 + r106099;
return r106100;
}
double f(double a1, double a2, double th) {
double r106101 = th;
double r106102 = cos(r106101);
double r106103 = a1;
double r106104 = a2;
double r106105 = r106104 * r106104;
double r106106 = fma(r106103, r106103, r106105);
double r106107 = r106102 * r106106;
double r106108 = 2.0;
double r106109 = sqrt(r106108);
double r106110 = sqrt(r106109);
double r106111 = sqrt(r106110);
double r106112 = r106107 / r106111;
double r106113 = 1.0;
double r106114 = r106113 / r106110;
double r106115 = r106114 / r106111;
double r106116 = r106112 * r106115;
return r106116;
}



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-sqr-sqrt0.5
Applied sqrt-prod0.5
Applied sqrt-prod0.5
Applied div-inv0.7
Applied times-frac0.5
Final simplification0.5
herbie shell --seed 2019346 +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))))