\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 r163697 = a;
double r163698 = r163697 * r163697;
double r163699 = b;
double r163700 = r163699 * r163699;
double r163701 = r163698 + r163700;
double r163702 = 2.0;
double r163703 = pow(r163701, r163702);
double r163704 = 4.0;
double r163705 = 1.0;
double r163706 = r163705 + r163697;
double r163707 = r163698 * r163706;
double r163708 = 3.0;
double r163709 = r163708 * r163697;
double r163710 = r163705 - r163709;
double r163711 = r163700 * r163710;
double r163712 = r163707 + r163711;
double r163713 = r163704 * r163712;
double r163714 = r163703 + r163713;
double r163715 = r163714 - r163705;
return r163715;
}
double f(double a, double b) {
double r163716 = 4.0;
double r163717 = a;
double r163718 = r163717 * r163717;
double r163719 = 1.0;
double r163720 = r163719 + r163717;
double r163721 = b;
double r163722 = r163721 * r163721;
double r163723 = 3.0;
double r163724 = r163723 * r163717;
double r163725 = r163719 - r163724;
double r163726 = r163722 * r163725;
double r163727 = fma(r163718, r163720, r163726);
double r163728 = r163718 + r163722;
double r163729 = 2.0;
double r163730 = pow(r163728, r163729);
double r163731 = r163730 - r163719;
double r163732 = fma(r163716, r163727, r163731);
return r163732;
}



Bits error versus a



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