\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(\mathsf{fma}\left(4, a, 4\right), a \cdot a, \mathsf{fma}\left(b \cdot b, \mathsf{fma}\left(a, -12, 4\right), \mathsf{fma}\left(\mathsf{fma}\left(a, a, b \cdot b\right), \mathsf{fma}\left(a, a, b \cdot b\right), -1\right)\right)\right)double f(double a, double b) {
double r5569020 = a;
double r5569021 = r5569020 * r5569020;
double r5569022 = b;
double r5569023 = r5569022 * r5569022;
double r5569024 = r5569021 + r5569023;
double r5569025 = 2.0;
double r5569026 = pow(r5569024, r5569025);
double r5569027 = 4.0;
double r5569028 = 1.0;
double r5569029 = r5569028 + r5569020;
double r5569030 = r5569021 * r5569029;
double r5569031 = 3.0;
double r5569032 = r5569031 * r5569020;
double r5569033 = r5569028 - r5569032;
double r5569034 = r5569023 * r5569033;
double r5569035 = r5569030 + r5569034;
double r5569036 = r5569027 * r5569035;
double r5569037 = r5569026 + r5569036;
double r5569038 = r5569037 - r5569028;
return r5569038;
}
double f(double a, double b) {
double r5569039 = 4.0;
double r5569040 = a;
double r5569041 = fma(r5569039, r5569040, r5569039);
double r5569042 = r5569040 * r5569040;
double r5569043 = b;
double r5569044 = r5569043 * r5569043;
double r5569045 = -12.0;
double r5569046 = fma(r5569040, r5569045, r5569039);
double r5569047 = fma(r5569040, r5569040, r5569044);
double r5569048 = -1.0;
double r5569049 = fma(r5569047, r5569047, r5569048);
double r5569050 = fma(r5569044, r5569046, r5569049);
double r5569051 = fma(r5569041, r5569042, r5569050);
return r5569051;
}



Bits error versus a



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