\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(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2}\right) - 1double f(double a, double b) {
double r223776 = a;
double r223777 = r223776 * r223776;
double r223778 = b;
double r223779 = r223778 * r223778;
double r223780 = r223777 + r223779;
double r223781 = 2.0;
double r223782 = pow(r223780, r223781);
double r223783 = 4.0;
double r223784 = 1.0;
double r223785 = r223784 + r223776;
double r223786 = r223777 * r223785;
double r223787 = 3.0;
double r223788 = r223787 * r223776;
double r223789 = r223784 - r223788;
double r223790 = r223779 * r223789;
double r223791 = r223786 + r223790;
double r223792 = r223783 * r223791;
double r223793 = r223782 + r223792;
double r223794 = r223793 - r223784;
return r223794;
}
double f(double a, double b) {
double r223795 = 4.0;
double r223796 = a;
double r223797 = r223796 * r223796;
double r223798 = 1.0;
double r223799 = r223798 + r223796;
double r223800 = b;
double r223801 = r223800 * r223800;
double r223802 = 3.0;
double r223803 = r223802 * r223796;
double r223804 = r223798 - r223803;
double r223805 = r223801 * r223804;
double r223806 = fma(r223797, r223799, r223805);
double r223807 = fma(r223796, r223796, r223801);
double r223808 = 2.0;
double r223809 = pow(r223807, r223808);
double r223810 = fma(r223795, r223806, r223809);
double r223811 = r223810 - r223798;
return r223811;
}



Bits error versus a



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