\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(1 - 3 \cdot a\right)\right)\right) - 1\mathsf{fma}\left(4, \mathsf{fma}\left(a \cdot a, 1 + a, \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right), {\left(a \cdot a + b \cdot b\right)}^{2} - 1\right)double f(double a, double b) {
double r342401 = a;
double r342402 = r342401 * r342401;
double r342403 = b;
double r342404 = r342403 * r342403;
double r342405 = r342402 + r342404;
double r342406 = 2.0;
double r342407 = pow(r342405, r342406);
double r342408 = 4.0;
double r342409 = 1.0;
double r342410 = r342409 + r342401;
double r342411 = r342402 * r342410;
double r342412 = 3.0;
double r342413 = r342412 * r342401;
double r342414 = r342409 - r342413;
double r342415 = r342404 * r342414;
double r342416 = r342411 + r342415;
double r342417 = r342408 * r342416;
double r342418 = r342407 + r342417;
double r342419 = r342418 - r342409;
return r342419;
}
double f(double a, double b) {
double r342420 = 4.0;
double r342421 = a;
double r342422 = r342421 * r342421;
double r342423 = 1.0;
double r342424 = r342423 + r342421;
double r342425 = b;
double r342426 = r342425 * r342425;
double r342427 = 3.0;
double r342428 = r342427 * r342421;
double r342429 = r342423 - r342428;
double r342430 = r342426 * r342429;
double r342431 = fma(r342422, r342424, r342430);
double r342432 = r342422 + r342426;
double r342433 = 2.0;
double r342434 = pow(r342432, r342433);
double r342435 = r342434 - r342423;
double r342436 = fma(r342420, r342431, r342435);
return r342436;
}



Bits error versus a



Bits error versus b
Initial program 0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2020024 +o rules:numerics
(FPCore (a b)
:name "Bouland and Aaronson, Equation (25)"
:precision binary64
(- (+ (pow (+ (* a a) (* b b)) 2) (* 4 (+ (* (* a a) (+ 1 a)) (* (* b b) (- 1 (* 3 a)))))) 1))