\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(\mathsf{fma}\left(\mathsf{fma}\left(a, a, a\right), a, \mathsf{fma}\left(a \cdot -3, b \cdot b, b \cdot b\right)\right), 4, \mathsf{fma}\left(\mathsf{fma}\left(a, a, b \cdot b\right), \mathsf{fma}\left(a, a, b \cdot b\right), -1\right)\right)double f(double a, double b) {
double r6243051 = a;
double r6243052 = r6243051 * r6243051;
double r6243053 = b;
double r6243054 = r6243053 * r6243053;
double r6243055 = r6243052 + r6243054;
double r6243056 = 2.0;
double r6243057 = pow(r6243055, r6243056);
double r6243058 = 4.0;
double r6243059 = 1.0;
double r6243060 = r6243059 + r6243051;
double r6243061 = r6243052 * r6243060;
double r6243062 = 3.0;
double r6243063 = r6243062 * r6243051;
double r6243064 = r6243059 - r6243063;
double r6243065 = r6243054 * r6243064;
double r6243066 = r6243061 + r6243065;
double r6243067 = r6243058 * r6243066;
double r6243068 = r6243057 + r6243067;
double r6243069 = r6243068 - r6243059;
return r6243069;
}
double f(double a, double b) {
double r6243070 = a;
double r6243071 = fma(r6243070, r6243070, r6243070);
double r6243072 = -3.0;
double r6243073 = r6243070 * r6243072;
double r6243074 = b;
double r6243075 = r6243074 * r6243074;
double r6243076 = fma(r6243073, r6243075, r6243075);
double r6243077 = fma(r6243071, r6243070, r6243076);
double r6243078 = 4.0;
double r6243079 = fma(r6243070, r6243070, r6243075);
double r6243080 = -1.0;
double r6243081 = fma(r6243079, r6243079, r6243080);
double r6243082 = fma(r6243077, r6243078, r6243081);
return r6243082;
}



Bits error versus a



Bits error versus b
Initial program 0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019139 +o rules:numerics
(FPCore (a b)
:name "Bouland and Aaronson, Equation (25)"
(- (+ (pow (+ (* a a) (* b b)) 2) (* 4 (+ (* (* a a) (+ 1 a)) (* (* b b) (- 1 (* 3 a)))))) 1))