\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, \mathsf{fma}\left(a, a, a\right), \left(b \cdot b\right) \cdot \mathsf{fma}\left(a, -3, 1\right)\right), \mathsf{fma}\left(\mathsf{fma}\left(a, a, b \cdot b\right), \mathsf{fma}\left(a, a, b \cdot b\right), -1\right)\right)double f(double a, double b) {
double r2971624 = a;
double r2971625 = r2971624 * r2971624;
double r2971626 = b;
double r2971627 = r2971626 * r2971626;
double r2971628 = r2971625 + r2971627;
double r2971629 = 2.0;
double r2971630 = pow(r2971628, r2971629);
double r2971631 = 4.0;
double r2971632 = 1.0;
double r2971633 = r2971632 + r2971624;
double r2971634 = r2971625 * r2971633;
double r2971635 = 3.0;
double r2971636 = r2971635 * r2971624;
double r2971637 = r2971632 - r2971636;
double r2971638 = r2971627 * r2971637;
double r2971639 = r2971634 + r2971638;
double r2971640 = r2971631 * r2971639;
double r2971641 = r2971630 + r2971640;
double r2971642 = r2971641 - r2971632;
return r2971642;
}
double f(double a, double b) {
double r2971643 = 4.0;
double r2971644 = a;
double r2971645 = fma(r2971644, r2971644, r2971644);
double r2971646 = b;
double r2971647 = r2971646 * r2971646;
double r2971648 = -3.0;
double r2971649 = 1.0;
double r2971650 = fma(r2971644, r2971648, r2971649);
double r2971651 = r2971647 * r2971650;
double r2971652 = fma(r2971644, r2971645, r2971651);
double r2971653 = fma(r2971644, r2971644, r2971647);
double r2971654 = -1.0;
double r2971655 = fma(r2971653, r2971653, r2971654);
double r2971656 = fma(r2971643, r2971652, r2971655);
return r2971656;
}



Bits error versus a



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