\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\left(4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 + a\right) + \left(b \cdot b\right) \cdot \left(1 - a \cdot 3\right)\right) + \mathsf{fma}\left(b, \left(\mathsf{fma}\left(b, b, \left(\left(a \cdot a\right) \cdot 2\right)\right) \cdot b\right), \left({a}^{4}\right)\right)\right) - 1double f(double a, double b) {
double r18850512 = a;
double r18850513 = r18850512 * r18850512;
double r18850514 = b;
double r18850515 = r18850514 * r18850514;
double r18850516 = r18850513 + r18850515;
double r18850517 = 2.0;
double r18850518 = pow(r18850516, r18850517);
double r18850519 = 4.0;
double r18850520 = 1.0;
double r18850521 = r18850520 + r18850512;
double r18850522 = r18850513 * r18850521;
double r18850523 = 3.0;
double r18850524 = r18850523 * r18850512;
double r18850525 = r18850520 - r18850524;
double r18850526 = r18850515 * r18850525;
double r18850527 = r18850522 + r18850526;
double r18850528 = r18850519 * r18850527;
double r18850529 = r18850518 + r18850528;
double r18850530 = r18850529 - r18850520;
return r18850530;
}
double f(double a, double b) {
double r18850531 = 4.0;
double r18850532 = a;
double r18850533 = r18850532 * r18850532;
double r18850534 = 1.0;
double r18850535 = r18850534 + r18850532;
double r18850536 = r18850533 * r18850535;
double r18850537 = b;
double r18850538 = r18850537 * r18850537;
double r18850539 = 3.0;
double r18850540 = r18850532 * r18850539;
double r18850541 = r18850534 - r18850540;
double r18850542 = r18850538 * r18850541;
double r18850543 = r18850536 + r18850542;
double r18850544 = r18850531 * r18850543;
double r18850545 = 2.0;
double r18850546 = r18850533 * r18850545;
double r18850547 = fma(r18850537, r18850537, r18850546);
double r18850548 = r18850547 * r18850537;
double r18850549 = pow(r18850532, r18850531);
double r18850550 = fma(r18850537, r18850548, r18850549);
double r18850551 = r18850544 + r18850550;
double r18850552 = r18850551 - r18850534;
return r18850552;
}



Bits error versus a



Bits error versus b
Initial program 0.2
Taylor expanded around 0 0.0
Simplified0.2
rmApplied pow10.2
Applied pow10.2
Applied pow-prod-up0.2
Applied pow20.2
Applied pow-prod-up0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019121 +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))