\frac{\cos th}{\sqrt{2}} \cdot \left(a1 \cdot a1\right) + \frac{\cos th}{\sqrt{2}} \cdot \left(a2 \cdot a2\right)\left(\mathsf{fma}\left(a1, a1, a2 \cdot a2\right) \cdot \cos th\right) \cdot \frac{\frac{1}{\sqrt{\sqrt{2}}}}{\sqrt{\sqrt{2}}}double f(double a1, double a2, double th) {
double r95700 = th;
double r95701 = cos(r95700);
double r95702 = 2.0;
double r95703 = sqrt(r95702);
double r95704 = r95701 / r95703;
double r95705 = a1;
double r95706 = r95705 * r95705;
double r95707 = r95704 * r95706;
double r95708 = a2;
double r95709 = r95708 * r95708;
double r95710 = r95704 * r95709;
double r95711 = r95707 + r95710;
return r95711;
}
double f(double a1, double a2, double th) {
double r95712 = a1;
double r95713 = a2;
double r95714 = r95713 * r95713;
double r95715 = fma(r95712, r95712, r95714);
double r95716 = th;
double r95717 = cos(r95716);
double r95718 = r95715 * r95717;
double r95719 = 1.0;
double r95720 = 2.0;
double r95721 = sqrt(r95720);
double r95722 = sqrt(r95721);
double r95723 = r95719 / r95722;
double r95724 = r95723 / r95722;
double r95725 = r95718 * r95724;
return r95725;
}



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.5
Applied associate-/r*0.5
rmApplied *-un-lft-identity0.5
Applied sqrt-prod0.5
Applied sqrt-prod0.5
Applied div-inv0.6
Applied times-frac0.5
Applied associate-*r*0.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2020047 +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))))