\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 - a\right) + \left(b \cdot b\right) \cdot \left(3 + a\right)\right)\right) - 1{\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{\left(2 \cdot \frac{2}{2}\right)} + \mathsf{fma}\left(4, \mathsf{fma}\left(a \cdot a, 1 - a, \left(b \cdot b\right) \cdot \left(3 + a\right)\right), -1\right)double f(double a, double b) {
double r365403 = a;
double r365404 = r365403 * r365403;
double r365405 = b;
double r365406 = r365405 * r365405;
double r365407 = r365404 + r365406;
double r365408 = 2.0;
double r365409 = pow(r365407, r365408);
double r365410 = 4.0;
double r365411 = 1.0;
double r365412 = r365411 - r365403;
double r365413 = r365404 * r365412;
double r365414 = 3.0;
double r365415 = r365414 + r365403;
double r365416 = r365406 * r365415;
double r365417 = r365413 + r365416;
double r365418 = r365410 * r365417;
double r365419 = r365409 + r365418;
double r365420 = r365419 - r365411;
return r365420;
}
double f(double a, double b) {
double r365421 = a;
double r365422 = b;
double r365423 = r365422 * r365422;
double r365424 = fma(r365421, r365421, r365423);
double r365425 = 2.0;
double r365426 = 2.0;
double r365427 = r365426 / r365425;
double r365428 = r365425 * r365427;
double r365429 = pow(r365424, r365428);
double r365430 = 4.0;
double r365431 = r365421 * r365421;
double r365432 = 1.0;
double r365433 = r365432 - r365421;
double r365434 = 3.0;
double r365435 = r365434 + r365421;
double r365436 = r365423 * r365435;
double r365437 = fma(r365431, r365433, r365436);
double r365438 = -r365432;
double r365439 = fma(r365430, r365437, r365438);
double r365440 = r365429 + r365439;
return r365440;
}



Bits error versus a



Bits error versus b
Initial program 0.2
rmApplied sqr-pow0.2
Applied fma-def0.2
rmApplied *-un-lft-identity0.2
Applied *-un-lft-identity0.2
Applied distribute-lft-out--0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019346 +o rules:numerics
(FPCore (a b)
:name "Bouland and Aaronson, Equation (24)"
:precision binary64
(- (+ (pow (+ (* a a) (* b b)) 2) (* 4 (+ (* (* a a) (- 1 a)) (* (* b b) (+ 3 a))))) 1))