\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, \mathsf{fma}\left(a, a, a\right), \left(b \cdot b\right) \cdot \mathsf{fma}\left(a, -3, 1\right)\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)double f(double a, double b) {
double r5686956 = a;
double r5686957 = r5686956 * r5686956;
double r5686958 = b;
double r5686959 = r5686958 * r5686958;
double r5686960 = r5686957 + r5686959;
double r5686961 = 2.0;
double r5686962 = pow(r5686960, r5686961);
double r5686963 = 4.0;
double r5686964 = 1.0;
double r5686965 = r5686964 + r5686956;
double r5686966 = r5686957 * r5686965;
double r5686967 = 3.0;
double r5686968 = r5686967 * r5686956;
double r5686969 = r5686964 - r5686968;
double r5686970 = r5686959 * r5686969;
double r5686971 = r5686966 + r5686970;
double r5686972 = r5686963 * r5686971;
double r5686973 = r5686962 + r5686972;
double r5686974 = r5686973 - r5686964;
return r5686974;
}
double f(double a, double b) {
double r5686975 = 4.0;
double r5686976 = a;
double r5686977 = fma(r5686976, r5686976, r5686976);
double r5686978 = b;
double r5686979 = r5686978 * r5686978;
double r5686980 = -3.0;
double r5686981 = 1.0;
double r5686982 = fma(r5686976, r5686980, r5686981);
double r5686983 = r5686979 * r5686982;
double r5686984 = fma(r5686976, r5686977, r5686983);
double r5686985 = fma(r5686976, r5686976, r5686979);
double r5686986 = -1.0;
double r5686987 = fma(r5686985, r5686985, r5686986);
double r5686988 = fma(r5686975, r5686984, r5686987);
return r5686988;
}



Bits error versus a



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