\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 r118267 = a;
double r118268 = r118267 * r118267;
double r118269 = b;
double r118270 = r118269 * r118269;
double r118271 = r118268 + r118270;
double r118272 = 2.0;
double r118273 = pow(r118271, r118272);
double r118274 = 4.0;
double r118275 = 1.0;
double r118276 = r118275 + r118267;
double r118277 = r118268 * r118276;
double r118278 = 3.0;
double r118279 = r118278 * r118267;
double r118280 = r118275 - r118279;
double r118281 = r118270 * r118280;
double r118282 = r118277 + r118281;
double r118283 = r118274 * r118282;
double r118284 = r118273 + r118283;
double r118285 = r118284 - r118275;
return r118285;
}
double f(double a, double b) {
double r118286 = 4.0;
double r118287 = a;
double r118288 = r118287 * r118287;
double r118289 = 1.0;
double r118290 = r118289 + r118287;
double r118291 = b;
double r118292 = r118291 * r118291;
double r118293 = 3.0;
double r118294 = r118293 * r118287;
double r118295 = r118289 - r118294;
double r118296 = r118292 * r118295;
double r118297 = fma(r118288, r118290, r118296);
double r118298 = r118288 + r118292;
double r118299 = 2.0;
double r118300 = pow(r118298, r118299);
double r118301 = r118300 - r118289;
double r118302 = fma(r118286, r118297, r118301);
return r118302;
}



Bits error versus a



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