\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\left(\mathsf{fma}\left({a}^{2}, \left(1 - a\right) \cdot 4, {\left(a \cdot a + b \cdot b\right)}^{2}\right) + 4 \cdot \left(\left(b \cdot b\right) \cdot \left(3 + a\right)\right)\right) - 1double f(double a, double b) {
double r306117 = a;
double r306118 = r306117 * r306117;
double r306119 = b;
double r306120 = r306119 * r306119;
double r306121 = r306118 + r306120;
double r306122 = 2.0;
double r306123 = pow(r306121, r306122);
double r306124 = 4.0;
double r306125 = 1.0;
double r306126 = r306125 - r306117;
double r306127 = r306118 * r306126;
double r306128 = 3.0;
double r306129 = r306128 + r306117;
double r306130 = r306120 * r306129;
double r306131 = r306127 + r306130;
double r306132 = r306124 * r306131;
double r306133 = r306123 + r306132;
double r306134 = r306133 - r306125;
return r306134;
}
double f(double a, double b) {
double r306135 = a;
double r306136 = 2.0;
double r306137 = pow(r306135, r306136);
double r306138 = 1.0;
double r306139 = r306138 - r306135;
double r306140 = 4.0;
double r306141 = r306139 * r306140;
double r306142 = r306135 * r306135;
double r306143 = b;
double r306144 = r306143 * r306143;
double r306145 = r306142 + r306144;
double r306146 = 2.0;
double r306147 = pow(r306145, r306146);
double r306148 = fma(r306137, r306141, r306147);
double r306149 = 3.0;
double r306150 = r306149 + r306135;
double r306151 = r306144 * r306150;
double r306152 = r306140 * r306151;
double r306153 = r306148 + r306152;
double r306154 = r306153 - r306138;
return r306154;
}



Bits error versus a



Bits error versus b
Initial program 0.2
rmApplied distribute-lft-in0.2
Applied associate-+r+0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2020036 +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))