\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(\mathsf{fma}\left({a}^{2}, \left(1 - a\right) \cdot 4, {\left(a \cdot a + b \cdot b\right)}^{2}\right) + \left(\left(b \cdot b\right) \cdot \left(3 + a\right)\right) \cdot 4\right) - 1double f(double a, double b) {
double r331857 = a;
double r331858 = r331857 * r331857;
double r331859 = b;
double r331860 = r331859 * r331859;
double r331861 = r331858 + r331860;
double r331862 = 2.0;
double r331863 = pow(r331861, r331862);
double r331864 = 4.0;
double r331865 = 1.0;
double r331866 = r331865 - r331857;
double r331867 = r331858 * r331866;
double r331868 = 3.0;
double r331869 = r331868 + r331857;
double r331870 = r331860 * r331869;
double r331871 = r331867 + r331870;
double r331872 = r331864 * r331871;
double r331873 = r331863 + r331872;
double r331874 = r331873 - r331865;
return r331874;
}
double f(double a, double b) {
double r331875 = a;
double r331876 = 2.0;
double r331877 = pow(r331875, r331876);
double r331878 = 1.0;
double r331879 = r331878 - r331875;
double r331880 = 4.0;
double r331881 = r331879 * r331880;
double r331882 = r331875 * r331875;
double r331883 = b;
double r331884 = r331883 * r331883;
double r331885 = r331882 + r331884;
double r331886 = 2.0;
double r331887 = pow(r331885, r331886);
double r331888 = fma(r331877, r331881, r331887);
double r331889 = 3.0;
double r331890 = r331889 + r331875;
double r331891 = r331884 * r331890;
double r331892 = r331891 * r331880;
double r331893 = r331888 + r331892;
double r331894 = r331893 - r331878;
return r331894;
}



Bits error versus a



Bits error versus b
Initial program 0.2
rmApplied distribute-rgt-in0.2
Applied associate-+r+0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2020035 +o rules:numerics
(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))