\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 r4851826 = a;
double r4851827 = r4851826 * r4851826;
double r4851828 = b;
double r4851829 = r4851828 * r4851828;
double r4851830 = r4851827 + r4851829;
double r4851831 = 2.0;
double r4851832 = pow(r4851830, r4851831);
double r4851833 = 4.0;
double r4851834 = 1.0;
double r4851835 = r4851834 + r4851826;
double r4851836 = r4851827 * r4851835;
double r4851837 = 3.0;
double r4851838 = r4851837 * r4851826;
double r4851839 = r4851834 - r4851838;
double r4851840 = r4851829 * r4851839;
double r4851841 = r4851836 + r4851840;
double r4851842 = r4851833 * r4851841;
double r4851843 = r4851832 + r4851842;
double r4851844 = r4851843 - r4851834;
return r4851844;
}
double f(double a, double b) {
double r4851845 = 4.0;
double r4851846 = a;
double r4851847 = fma(r4851845, r4851846, r4851845);
double r4851848 = r4851846 * r4851846;
double r4851849 = b;
double r4851850 = r4851849 * r4851849;
double r4851851 = -12.0;
double r4851852 = fma(r4851846, r4851851, r4851845);
double r4851853 = fma(r4851846, r4851846, r4851850);
double r4851854 = -1.0;
double r4851855 = fma(r4851853, r4851853, r4851854);
double r4851856 = fma(r4851850, r4851852, r4851855);
double r4851857 = fma(r4851847, r4851848, r4851856);
return r4851857;
}



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))