\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 r90145 = th;
double r90146 = cos(r90145);
double r90147 = 2.0;
double r90148 = sqrt(r90147);
double r90149 = r90146 / r90148;
double r90150 = a1;
double r90151 = r90150 * r90150;
double r90152 = r90149 * r90151;
double r90153 = a2;
double r90154 = r90153 * r90153;
double r90155 = r90149 * r90154;
double r90156 = r90152 + r90155;
return r90156;
}
double f(double a1, double a2, double th) {
double r90157 = a1;
double r90158 = a2;
double r90159 = r90158 * r90158;
double r90160 = fma(r90157, r90157, r90159);
double r90161 = th;
double r90162 = cos(r90161);
double r90163 = r90160 * r90162;
double r90164 = 2.0;
double r90165 = sqrt(r90164);
double r90166 = cbrt(r90165);
double r90167 = fabs(r90166);
double r90168 = r90163 / r90167;
double r90169 = 1.0;
double r90170 = sqrt(r90165);
double r90171 = r90169 / r90170;
double r90172 = sqrt(r90166);
double r90173 = r90171 / r90172;
double r90174 = r90168 * r90173;
return r90174;
}



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 add-cube-cbrt0.5
Applied sqrt-prod0.7
Applied div-inv0.5
Applied times-frac0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2019303 +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))))