x1 + \left(\left(\left(\left(\left(\left(\left(2 \cdot x1\right) \cdot \frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1}\right) \cdot \left(\frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1} - 3\right) + \left(x1 \cdot x1\right) \cdot \left(4 \cdot \frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1} - 6\right)\right) \cdot \left(x1 \cdot x1 + 1\right) + \left(\left(3 \cdot x1\right) \cdot x1\right) \cdot \frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1}\right) + \left(x1 \cdot x1\right) \cdot x1\right) + x1\right) + 3 \cdot \frac{\left(\left(3 \cdot x1\right) \cdot x1 - 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1}\right)\mathsf{fma}\left(\frac{3}{\mathsf{fma}\left(x1, x1, 1\right)}, \mathsf{fma}\left(3, x1 \cdot x1, -\mathsf{fma}\left(x2, 2, x1\right)\right), \left(x1 + \frac{\mathsf{fma}\left(3, x1 \cdot x1, 2 \cdot x2 - x1\right) \cdot \left(\left(3 \cdot x1\right) \cdot x1\right)}{\mathsf{fma}\left(x1, x1, 1\right)}\right) + \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(\frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{\left(x1 \cdot x1\right) \cdot \left(x1 \cdot x1\right) - 1 \cdot 1}, x1 \cdot x1 - 1, -3\right) \cdot 2, \frac{x1 \cdot \mathsf{fma}\left(3, x1 \cdot x1, 2 \cdot x2 - x1\right)}{\mathsf{fma}\left(x1, x1, 1\right)}, \left(x1 \cdot x1\right) \cdot \left(4 \cdot \frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1} - 6\right)\right), \mathsf{fma}\left(x1, x1, 1\right), \mathsf{fma}\left(x1, x1 \cdot x1, x1\right)\right)\right)double f(double x1, double x2) {
double r37863 = x1;
double r37864 = 2.0;
double r37865 = r37864 * r37863;
double r37866 = 3.0;
double r37867 = r37866 * r37863;
double r37868 = r37867 * r37863;
double r37869 = x2;
double r37870 = r37864 * r37869;
double r37871 = r37868 + r37870;
double r37872 = r37871 - r37863;
double r37873 = r37863 * r37863;
double r37874 = 1.0;
double r37875 = r37873 + r37874;
double r37876 = r37872 / r37875;
double r37877 = r37865 * r37876;
double r37878 = r37876 - r37866;
double r37879 = r37877 * r37878;
double r37880 = 4.0;
double r37881 = r37880 * r37876;
double r37882 = 6.0;
double r37883 = r37881 - r37882;
double r37884 = r37873 * r37883;
double r37885 = r37879 + r37884;
double r37886 = r37885 * r37875;
double r37887 = r37868 * r37876;
double r37888 = r37886 + r37887;
double r37889 = r37873 * r37863;
double r37890 = r37888 + r37889;
double r37891 = r37890 + r37863;
double r37892 = r37868 - r37870;
double r37893 = r37892 - r37863;
double r37894 = r37893 / r37875;
double r37895 = r37866 * r37894;
double r37896 = r37891 + r37895;
double r37897 = r37863 + r37896;
return r37897;
}
double f(double x1, double x2) {
double r37898 = 3.0;
double r37899 = x1;
double r37900 = 1.0;
double r37901 = fma(r37899, r37899, r37900);
double r37902 = r37898 / r37901;
double r37903 = r37899 * r37899;
double r37904 = x2;
double r37905 = 2.0;
double r37906 = fma(r37904, r37905, r37899);
double r37907 = -r37906;
double r37908 = fma(r37898, r37903, r37907);
double r37909 = r37905 * r37904;
double r37910 = r37909 - r37899;
double r37911 = fma(r37898, r37903, r37910);
double r37912 = r37898 * r37899;
double r37913 = r37912 * r37899;
double r37914 = r37911 * r37913;
double r37915 = r37914 / r37901;
double r37916 = r37899 + r37915;
double r37917 = r37913 + r37909;
double r37918 = r37917 - r37899;
double r37919 = r37903 * r37903;
double r37920 = r37900 * r37900;
double r37921 = r37919 - r37920;
double r37922 = r37918 / r37921;
double r37923 = r37903 - r37900;
double r37924 = -r37898;
double r37925 = fma(r37922, r37923, r37924);
double r37926 = r37925 * r37905;
double r37927 = r37899 * r37911;
double r37928 = r37927 / r37901;
double r37929 = 4.0;
double r37930 = r37903 + r37900;
double r37931 = r37918 / r37930;
double r37932 = r37929 * r37931;
double r37933 = 6.0;
double r37934 = r37932 - r37933;
double r37935 = r37903 * r37934;
double r37936 = fma(r37926, r37928, r37935);
double r37937 = fma(r37899, r37903, r37899);
double r37938 = fma(r37936, r37901, r37937);
double r37939 = r37916 + r37938;
double r37940 = fma(r37902, r37908, r37939);
return r37940;
}



Bits error versus x1



Bits error versus x2
Initial program 0.5
Simplified0.3
rmApplied flip-+0.3
Applied associate-/r/0.3
Applied fma-neg0.3
Final simplification0.3
herbie shell --seed 2020100 +o rules:numerics
(FPCore (x1 x2)
:name "Rosa's FloatVsDoubleBenchmark"
:precision binary64
(+ x1 (+ (+ (+ (+ (* (+ (* (* (* 2 x1) (/ (- (+ (* (* 3 x1) x1) (* 2 x2)) x1) (+ (* x1 x1) 1))) (- (/ (- (+ (* (* 3 x1) x1) (* 2 x2)) x1) (+ (* x1 x1) 1)) 3)) (* (* x1 x1) (- (* 4 (/ (- (+ (* (* 3 x1) x1) (* 2 x2)) x1) (+ (* x1 x1) 1))) 6))) (+ (* x1 x1) 1)) (* (* (* 3 x1) x1) (/ (- (+ (* (* 3 x1) x1) (* 2 x2)) x1) (+ (* x1 x1) 1)))) (* (* x1 x1) x1)) x1) (* 3 (/ (- (- (* (* 3 x1) x1) (* 2 x2)) x1) (+ (* x1 x1) 1))))))