\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(4, a, 4\right), a \cdot a, \mathsf{fma}\left(b \cdot b, \mathsf{fma}\left(a, -12, 4\right), \mathsf{fma}\left(\mathsf{fma}\left(a, a, b \cdot b\right), \mathsf{fma}\left(a, a, b \cdot b\right), -1\right)\right)\right)double f(double a, double b) {
double r5150277 = a;
double r5150278 = r5150277 * r5150277;
double r5150279 = b;
double r5150280 = r5150279 * r5150279;
double r5150281 = r5150278 + r5150280;
double r5150282 = 2.0;
double r5150283 = pow(r5150281, r5150282);
double r5150284 = 4.0;
double r5150285 = 1.0;
double r5150286 = r5150285 + r5150277;
double r5150287 = r5150278 * r5150286;
double r5150288 = 3.0;
double r5150289 = r5150288 * r5150277;
double r5150290 = r5150285 - r5150289;
double r5150291 = r5150280 * r5150290;
double r5150292 = r5150287 + r5150291;
double r5150293 = r5150284 * r5150292;
double r5150294 = r5150283 + r5150293;
double r5150295 = r5150294 - r5150285;
return r5150295;
}
double f(double a, double b) {
double r5150296 = 4.0;
double r5150297 = a;
double r5150298 = fma(r5150296, r5150297, r5150296);
double r5150299 = r5150297 * r5150297;
double r5150300 = b;
double r5150301 = r5150300 * r5150300;
double r5150302 = -12.0;
double r5150303 = fma(r5150297, r5150302, r5150296);
double r5150304 = fma(r5150297, r5150297, r5150301);
double r5150305 = -1.0;
double r5150306 = fma(r5150304, r5150304, r5150305);
double r5150307 = fma(r5150301, r5150303, r5150306);
double r5150308 = fma(r5150298, r5150299, r5150307);
return r5150308;
}



Bits error versus a



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