\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 r125664 = a;
double r125665 = r125664 * r125664;
double r125666 = b;
double r125667 = r125666 * r125666;
double r125668 = r125665 + r125667;
double r125669 = 2.0;
double r125670 = pow(r125668, r125669);
double r125671 = 4.0;
double r125672 = 1.0;
double r125673 = r125672 + r125664;
double r125674 = r125665 * r125673;
double r125675 = 3.0;
double r125676 = r125675 * r125664;
double r125677 = r125672 - r125676;
double r125678 = r125667 * r125677;
double r125679 = r125674 + r125678;
double r125680 = r125671 * r125679;
double r125681 = r125670 + r125680;
double r125682 = r125681 - r125672;
return r125682;
}
double f(double a, double b) {
double r125683 = 4.0;
double r125684 = a;
double r125685 = r125684 * r125684;
double r125686 = 1.0;
double r125687 = r125686 + r125684;
double r125688 = b;
double r125689 = r125688 * r125688;
double r125690 = 3.0;
double r125691 = r125690 * r125684;
double r125692 = r125686 - r125691;
double r125693 = r125689 * r125692;
double r125694 = fma(r125685, r125687, r125693);
double r125695 = r125685 + r125689;
double r125696 = 2.0;
double r125697 = pow(r125695, r125696);
double r125698 = r125697 - r125686;
double r125699 = fma(r125683, r125694, r125698);
return r125699;
}



Bits error versus a



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