\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(b, \mathsf{fma}\left(a \cdot b, -3, b\right), \mathsf{fma}\left(a \cdot a, a, a \cdot a\right)\right), \mathsf{fma}\left(\mathsf{fma}\left(b, b, a \cdot a\right), \mathsf{fma}\left(b, b, a \cdot a\right), -1\right)\right)double f(double a, double b) {
double r6436493 = a;
double r6436494 = r6436493 * r6436493;
double r6436495 = b;
double r6436496 = r6436495 * r6436495;
double r6436497 = r6436494 + r6436496;
double r6436498 = 2.0;
double r6436499 = pow(r6436497, r6436498);
double r6436500 = 4.0;
double r6436501 = 1.0;
double r6436502 = r6436501 + r6436493;
double r6436503 = r6436494 * r6436502;
double r6436504 = 3.0;
double r6436505 = r6436504 * r6436493;
double r6436506 = r6436501 - r6436505;
double r6436507 = r6436496 * r6436506;
double r6436508 = r6436503 + r6436507;
double r6436509 = r6436500 * r6436508;
double r6436510 = r6436499 + r6436509;
double r6436511 = r6436510 - r6436501;
return r6436511;
}
double f(double a, double b) {
double r6436512 = 4.0;
double r6436513 = b;
double r6436514 = a;
double r6436515 = r6436514 * r6436513;
double r6436516 = -3.0;
double r6436517 = fma(r6436515, r6436516, r6436513);
double r6436518 = r6436514 * r6436514;
double r6436519 = fma(r6436518, r6436514, r6436518);
double r6436520 = fma(r6436513, r6436517, r6436519);
double r6436521 = fma(r6436513, r6436513, r6436518);
double r6436522 = -1.0;
double r6436523 = fma(r6436521, r6436521, r6436522);
double r6436524 = fma(r6436512, r6436520, r6436523);
return r6436524;
}



Bits error versus a



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