\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 r116864 = a;
double r116865 = r116864 * r116864;
double r116866 = b;
double r116867 = r116866 * r116866;
double r116868 = r116865 + r116867;
double r116869 = 2.0;
double r116870 = pow(r116868, r116869);
double r116871 = 4.0;
double r116872 = 1.0;
double r116873 = r116872 + r116864;
double r116874 = r116865 * r116873;
double r116875 = 3.0;
double r116876 = r116875 * r116864;
double r116877 = r116872 - r116876;
double r116878 = r116867 * r116877;
double r116879 = r116874 + r116878;
double r116880 = r116871 * r116879;
double r116881 = r116870 + r116880;
double r116882 = r116881 - r116872;
return r116882;
}
double f(double a, double b) {
double r116883 = 4.0;
double r116884 = a;
double r116885 = r116884 * r116884;
double r116886 = 1.0;
double r116887 = r116886 + r116884;
double r116888 = b;
double r116889 = r116888 * r116888;
double r116890 = 3.0;
double r116891 = r116890 * r116884;
double r116892 = r116886 - r116891;
double r116893 = r116889 * r116892;
double r116894 = fma(r116885, r116887, r116893);
double r116895 = fma(r116884, r116884, r116889);
double r116896 = 2.0;
double r116897 = pow(r116895, r116896);
double r116898 = fma(r116883, r116894, r116897);
double r116899 = r116898 - r116886;
return r116899;
}



Bits error versus a



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