\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(a \cdot a + b \cdot b\right)}^{2} - 1\right)double f(double a, double b) {
double r355045 = a;
double r355046 = r355045 * r355045;
double r355047 = b;
double r355048 = r355047 * r355047;
double r355049 = r355046 + r355048;
double r355050 = 2.0;
double r355051 = pow(r355049, r355050);
double r355052 = 4.0;
double r355053 = 1.0;
double r355054 = r355053 + r355045;
double r355055 = r355046 * r355054;
double r355056 = 3.0;
double r355057 = r355056 * r355045;
double r355058 = r355053 - r355057;
double r355059 = r355048 * r355058;
double r355060 = r355055 + r355059;
double r355061 = r355052 * r355060;
double r355062 = r355051 + r355061;
double r355063 = r355062 - r355053;
return r355063;
}
double f(double a, double b) {
double r355064 = 4.0;
double r355065 = a;
double r355066 = r355065 * r355065;
double r355067 = 1.0;
double r355068 = r355067 + r355065;
double r355069 = b;
double r355070 = r355069 * r355069;
double r355071 = 3.0;
double r355072 = r355071 * r355065;
double r355073 = r355067 - r355072;
double r355074 = r355070 * r355073;
double r355075 = fma(r355066, r355068, r355074);
double r355076 = r355066 + r355070;
double r355077 = 2.0;
double r355078 = pow(r355076, r355077);
double r355079 = r355078 - r355067;
double r355080 = fma(r355064, r355075, r355079);
return r355080;
}



Bits error versus a



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