\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[3]{2} \cdot \sqrt[3]{2}}}} \cdot \frac{\frac{1}{\sqrt{\sqrt{2}}}}{\sqrt{\sqrt{\sqrt[3]{2}}}}double f(double a1, double a2, double th) {
double r93483 = th;
double r93484 = cos(r93483);
double r93485 = 2.0;
double r93486 = sqrt(r93485);
double r93487 = r93484 / r93486;
double r93488 = a1;
double r93489 = r93488 * r93488;
double r93490 = r93487 * r93489;
double r93491 = a2;
double r93492 = r93491 * r93491;
double r93493 = r93487 * r93492;
double r93494 = r93490 + r93493;
return r93494;
}
double f(double a1, double a2, double th) {
double r93495 = th;
double r93496 = cos(r93495);
double r93497 = a1;
double r93498 = a2;
double r93499 = r93498 * r93498;
double r93500 = fma(r93497, r93497, r93499);
double r93501 = r93496 * r93500;
double r93502 = 2.0;
double r93503 = cbrt(r93502);
double r93504 = r93503 * r93503;
double r93505 = sqrt(r93504);
double r93506 = sqrt(r93505);
double r93507 = r93501 / r93506;
double r93508 = 1.0;
double r93509 = sqrt(r93502);
double r93510 = sqrt(r93509);
double r93511 = r93508 / r93510;
double r93512 = sqrt(r93503);
double r93513 = sqrt(r93512);
double r93514 = r93511 / r93513;
double r93515 = r93507 * r93514;
return r93515;
}



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