\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, a + 1, \left(1 - a \cdot 3\right) \cdot \left(b \cdot b\right)\right), {\left(\mathsf{fma}\left(b, b, a \cdot a\right)\right)}^{2} - 1\right)double f(double a, double b) {
double r9517660 = a;
double r9517661 = r9517660 * r9517660;
double r9517662 = b;
double r9517663 = r9517662 * r9517662;
double r9517664 = r9517661 + r9517663;
double r9517665 = 2.0;
double r9517666 = pow(r9517664, r9517665);
double r9517667 = 4.0;
double r9517668 = 1.0;
double r9517669 = r9517668 + r9517660;
double r9517670 = r9517661 * r9517669;
double r9517671 = 3.0;
double r9517672 = r9517671 * r9517660;
double r9517673 = r9517668 - r9517672;
double r9517674 = r9517663 * r9517673;
double r9517675 = r9517670 + r9517674;
double r9517676 = r9517667 * r9517675;
double r9517677 = r9517666 + r9517676;
double r9517678 = r9517677 - r9517668;
return r9517678;
}
double f(double a, double b) {
double r9517679 = 4.0;
double r9517680 = a;
double r9517681 = r9517680 * r9517680;
double r9517682 = 1.0;
double r9517683 = r9517680 + r9517682;
double r9517684 = 3.0;
double r9517685 = r9517680 * r9517684;
double r9517686 = r9517682 - r9517685;
double r9517687 = b;
double r9517688 = r9517687 * r9517687;
double r9517689 = r9517686 * r9517688;
double r9517690 = fma(r9517681, r9517683, r9517689);
double r9517691 = fma(r9517687, r9517687, r9517681);
double r9517692 = 2.0;
double r9517693 = pow(r9517691, r9517692);
double r9517694 = r9517693 - r9517682;
double r9517695 = fma(r9517679, r9517690, r9517694);
return r9517695;
}



Bits error versus a



Bits error versus b
Initial program 0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019169 +o rules:numerics
(FPCore (a b)
:name "Bouland and Aaronson, Equation (25)"
(- (+ (pow (+ (* a a) (* b b)) 2.0) (* 4.0 (+ (* (* a a) (+ 1.0 a)) (* (* b b) (- 1.0 (* 3.0 a)))))) 1.0))