\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(3 + a\right)\right)\right) - 1\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(\left(a \cdot a\right) \cdot 1 + \left(-{a}^{3}\right)\right) + \left(b \cdot b\right) \cdot \left(3 + a\right)\right)\right) - 1double f(double a, double b) {
double r217613 = a;
double r217614 = r217613 * r217613;
double r217615 = b;
double r217616 = r217615 * r217615;
double r217617 = r217614 + r217616;
double r217618 = 2.0;
double r217619 = pow(r217617, r217618);
double r217620 = 4.0;
double r217621 = 1.0;
double r217622 = r217621 - r217613;
double r217623 = r217614 * r217622;
double r217624 = 3.0;
double r217625 = r217624 + r217613;
double r217626 = r217616 * r217625;
double r217627 = r217623 + r217626;
double r217628 = r217620 * r217627;
double r217629 = r217619 + r217628;
double r217630 = r217629 - r217621;
return r217630;
}
double f(double a, double b) {
double r217631 = a;
double r217632 = r217631 * r217631;
double r217633 = b;
double r217634 = r217633 * r217633;
double r217635 = r217632 + r217634;
double r217636 = 2.0;
double r217637 = pow(r217635, r217636);
double r217638 = 4.0;
double r217639 = 1.0;
double r217640 = r217632 * r217639;
double r217641 = 3.0;
double r217642 = pow(r217631, r217641);
double r217643 = -r217642;
double r217644 = r217640 + r217643;
double r217645 = 3.0;
double r217646 = r217645 + r217631;
double r217647 = r217634 * r217646;
double r217648 = r217644 + r217647;
double r217649 = r217638 * r217648;
double r217650 = r217637 + r217649;
double r217651 = r217650 - r217639;
return r217651;
}



Bits error versus a



Bits error versus b
Results
Initial program 0.2
rmApplied sub-neg0.2
Applied distribute-lft-in0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019235
(FPCore (a b)
:name "Bouland and Aaronson, Equation (24)"
:precision binary64
(- (+ (pow (+ (* a a) (* b b)) 2) (* 4 (+ (* (* a a) (- 1 a)) (* (* b b) (+ 3 a))))) 1))