\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 r182456 = a;
double r182457 = r182456 * r182456;
double r182458 = b;
double r182459 = r182458 * r182458;
double r182460 = r182457 + r182459;
double r182461 = 2.0;
double r182462 = pow(r182460, r182461);
double r182463 = 4.0;
double r182464 = 1.0;
double r182465 = r182464 + r182456;
double r182466 = r182457 * r182465;
double r182467 = 3.0;
double r182468 = r182467 * r182456;
double r182469 = r182464 - r182468;
double r182470 = r182459 * r182469;
double r182471 = r182466 + r182470;
double r182472 = r182463 * r182471;
double r182473 = r182462 + r182472;
double r182474 = r182473 - r182464;
return r182474;
}
double f(double a, double b) {
double r182475 = 4.0;
double r182476 = a;
double r182477 = r182476 * r182476;
double r182478 = 1.0;
double r182479 = r182478 + r182476;
double r182480 = b;
double r182481 = r182480 * r182480;
double r182482 = 3.0;
double r182483 = r182482 * r182476;
double r182484 = r182478 - r182483;
double r182485 = r182481 * r182484;
double r182486 = fma(r182477, r182479, r182485);
double r182487 = r182477 + r182481;
double r182488 = 2.0;
double r182489 = pow(r182487, r182488);
double r182490 = r182489 - r182478;
double r182491 = fma(r182475, r182486, r182490);
return r182491;
}



Bits error versus a



Bits error versus b
Initial program 0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2020027 +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))