\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 r150737 = a;
double r150738 = r150737 * r150737;
double r150739 = b;
double r150740 = r150739 * r150739;
double r150741 = r150738 + r150740;
double r150742 = 2.0;
double r150743 = pow(r150741, r150742);
double r150744 = 4.0;
double r150745 = 1.0;
double r150746 = r150745 + r150737;
double r150747 = r150738 * r150746;
double r150748 = 3.0;
double r150749 = r150748 * r150737;
double r150750 = r150745 - r150749;
double r150751 = r150740 * r150750;
double r150752 = r150747 + r150751;
double r150753 = r150744 * r150752;
double r150754 = r150743 + r150753;
double r150755 = r150754 - r150745;
return r150755;
}
double f(double a, double b) {
double r150756 = 4.0;
double r150757 = a;
double r150758 = r150757 * r150757;
double r150759 = 1.0;
double r150760 = r150759 + r150757;
double r150761 = b;
double r150762 = r150761 * r150761;
double r150763 = 3.0;
double r150764 = r150763 * r150757;
double r150765 = r150759 - r150764;
double r150766 = r150762 * r150765;
double r150767 = fma(r150758, r150760, r150766);
double r150768 = fma(r150757, r150757, r150762);
double r150769 = 2.0;
double r150770 = pow(r150768, r150769);
double r150771 = fma(r150756, r150767, r150770);
double r150772 = r150771 - r150759;
return r150772;
}



Bits error versus a



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