\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}{\sqrt{\left|\sqrt[3]{2}\right|}} \cdot \frac{\frac{1}{\sqrt{\sqrt{2}}}}{\sqrt{\sqrt{\sqrt[3]{2}}}}double f(double a1, double a2, double th) {
double r89109 = th;
double r89110 = cos(r89109);
double r89111 = 2.0;
double r89112 = sqrt(r89111);
double r89113 = r89110 / r89112;
double r89114 = a1;
double r89115 = r89114 * r89114;
double r89116 = r89113 * r89115;
double r89117 = a2;
double r89118 = r89117 * r89117;
double r89119 = r89113 * r89118;
double r89120 = r89116 + r89119;
return r89120;
}
double f(double a1, double a2, double th) {
double r89121 = a1;
double r89122 = a2;
double r89123 = r89122 * r89122;
double r89124 = fma(r89121, r89121, r89123);
double r89125 = th;
double r89126 = cos(r89125);
double r89127 = r89124 * r89126;
double r89128 = 2.0;
double r89129 = cbrt(r89128);
double r89130 = fabs(r89129);
double r89131 = sqrt(r89130);
double r89132 = r89127 / r89131;
double r89133 = 1.0;
double r89134 = sqrt(r89128);
double r89135 = sqrt(r89134);
double r89136 = r89133 / r89135;
double r89137 = sqrt(r89129);
double r89138 = sqrt(r89137);
double r89139 = r89136 / r89138;
double r89140 = r89132 * r89139;
return r89140;
}



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.7
Applied sqrt-prod0.7
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))))