\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(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2}\right) - 1double f(double a, double b) {
double r117405 = a;
double r117406 = r117405 * r117405;
double r117407 = b;
double r117408 = r117407 * r117407;
double r117409 = r117406 + r117408;
double r117410 = 2.0;
double r117411 = pow(r117409, r117410);
double r117412 = 4.0;
double r117413 = 1.0;
double r117414 = r117413 + r117405;
double r117415 = r117406 * r117414;
double r117416 = 3.0;
double r117417 = r117416 * r117405;
double r117418 = r117413 - r117417;
double r117419 = r117408 * r117418;
double r117420 = r117415 + r117419;
double r117421 = r117412 * r117420;
double r117422 = r117411 + r117421;
double r117423 = r117422 - r117413;
return r117423;
}
double f(double a, double b) {
double r117424 = 4.0;
double r117425 = a;
double r117426 = r117425 * r117425;
double r117427 = 1.0;
double r117428 = r117427 + r117425;
double r117429 = b;
double r117430 = r117429 * r117429;
double r117431 = 3.0;
double r117432 = r117431 * r117425;
double r117433 = r117427 - r117432;
double r117434 = r117430 * r117433;
double r117435 = fma(r117426, r117428, r117434);
double r117436 = fma(r117425, r117425, r117430);
double r117437 = 2.0;
double r117438 = pow(r117436, r117437);
double r117439 = fma(r117424, r117435, r117438);
double r117440 = r117439 - r117427;
return r117440;
}



Bits error versus a



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