\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(3 + a\right)\right)\right) - 1\sqrt{\mathsf{fma}\left(\mathsf{fma}\left(a \cdot a, 1 - a, \left(b \cdot b\right) \cdot \left(3 + a\right)\right), 4, {\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2}\right)} \cdot \sqrt{\mathsf{fma}\left(\mathsf{fma}\left(a \cdot a, 1 - a, \left(b \cdot b\right) \cdot \left(3 + a\right)\right), 4, {\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2}\right)} - 1double f(double a, double b) {
double r194393 = a;
double r194394 = r194393 * r194393;
double r194395 = b;
double r194396 = r194395 * r194395;
double r194397 = r194394 + r194396;
double r194398 = 2.0;
double r194399 = pow(r194397, r194398);
double r194400 = 4.0;
double r194401 = 1.0;
double r194402 = r194401 - r194393;
double r194403 = r194394 * r194402;
double r194404 = 3.0;
double r194405 = r194404 + r194393;
double r194406 = r194396 * r194405;
double r194407 = r194403 + r194406;
double r194408 = r194400 * r194407;
double r194409 = r194399 + r194408;
double r194410 = r194409 - r194401;
return r194410;
}
double f(double a, double b) {
double r194411 = a;
double r194412 = r194411 * r194411;
double r194413 = 1.0;
double r194414 = r194413 - r194411;
double r194415 = b;
double r194416 = r194415 * r194415;
double r194417 = 3.0;
double r194418 = r194417 + r194411;
double r194419 = r194416 * r194418;
double r194420 = fma(r194412, r194414, r194419);
double r194421 = 4.0;
double r194422 = fma(r194411, r194411, r194416);
double r194423 = 2.0;
double r194424 = pow(r194422, r194423);
double r194425 = fma(r194420, r194421, r194424);
double r194426 = sqrt(r194425);
double r194427 = r194426 * r194426;
double r194428 = r194427 - r194413;
return r194428;
}



Bits error versus a



Bits error versus b
Initial program 0.2
Simplified0.2
rmApplied add-sqr-sqrt0.2
Final simplification0.2
herbie shell --seed 2019322 +o rules:numerics
(FPCore (a b)
:name "Bouland and Aaronson, Equation (24)"
:precision binary64
(- (+ (pow (+ (* a a) (* b b)) 2) (* 4 (+ (* (* a a) (- 1 a)) (* (* b b) (+ 3 a))))) 1))