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)}^{3} + {1}^{3}}, \left(x1 \cdot x1\right) \cdot \left(x1 \cdot x1\right) + \left(1 \cdot 1 - \left(x1 \cdot x1\right) \cdot 1\right), -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)}, \frac{\left({x1}^{2} \cdot 4\right) \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(-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 r37835 = x1;
double r37836 = 2.0;
double r37837 = r37836 * r37835;
double r37838 = 3.0;
double r37839 = r37838 * r37835;
double r37840 = r37839 * r37835;
double r37841 = x2;
double r37842 = r37836 * r37841;
double r37843 = r37840 + r37842;
double r37844 = r37843 - r37835;
double r37845 = r37835 * r37835;
double r37846 = 1.0;
double r37847 = r37845 + r37846;
double r37848 = r37844 / r37847;
double r37849 = r37837 * r37848;
double r37850 = r37848 - r37838;
double r37851 = r37849 * r37850;
double r37852 = 4.0;
double r37853 = r37852 * r37848;
double r37854 = 6.0;
double r37855 = r37853 - r37854;
double r37856 = r37845 * r37855;
double r37857 = r37851 + r37856;
double r37858 = r37857 * r37847;
double r37859 = r37840 * r37848;
double r37860 = r37858 + r37859;
double r37861 = r37845 * r37835;
double r37862 = r37860 + r37861;
double r37863 = r37862 + r37835;
double r37864 = r37840 - r37842;
double r37865 = r37864 - r37835;
double r37866 = r37865 / r37847;
double r37867 = r37838 * r37866;
double r37868 = r37863 + r37867;
double r37869 = r37835 + r37868;
return r37869;
}
double f(double x1, double x2) {
double r37870 = 3.0;
double r37871 = x1;
double r37872 = 1.0;
double r37873 = fma(r37871, r37871, r37872);
double r37874 = r37870 / r37873;
double r37875 = r37871 * r37871;
double r37876 = x2;
double r37877 = 2.0;
double r37878 = fma(r37876, r37877, r37871);
double r37879 = -r37878;
double r37880 = fma(r37870, r37875, r37879);
double r37881 = r37877 * r37876;
double r37882 = r37881 - r37871;
double r37883 = fma(r37870, r37875, r37882);
double r37884 = r37870 * r37871;
double r37885 = r37884 * r37871;
double r37886 = r37883 * r37885;
double r37887 = r37886 / r37873;
double r37888 = r37871 + r37887;
double r37889 = r37885 + r37881;
double r37890 = r37889 - r37871;
double r37891 = 3.0;
double r37892 = pow(r37875, r37891);
double r37893 = pow(r37872, r37891);
double r37894 = r37892 + r37893;
double r37895 = r37890 / r37894;
double r37896 = r37875 * r37875;
double r37897 = r37872 * r37872;
double r37898 = r37875 * r37872;
double r37899 = r37897 - r37898;
double r37900 = r37896 + r37899;
double r37901 = -r37870;
double r37902 = fma(r37895, r37900, r37901);
double r37903 = r37902 * r37877;
double r37904 = r37871 * r37883;
double r37905 = r37904 / r37873;
double r37906 = 2.0;
double r37907 = pow(r37871, r37906);
double r37908 = 4.0;
double r37909 = r37907 * r37908;
double r37910 = r37909 * r37883;
double r37911 = r37910 / r37873;
double r37912 = 6.0;
double r37913 = -r37912;
double r37914 = r37875 * r37913;
double r37915 = r37911 + r37914;
double r37916 = fma(r37903, r37905, r37915);
double r37917 = fma(r37871, r37875, r37871);
double r37918 = fma(r37916, r37873, r37917);
double r37919 = r37888 + r37918;
double r37920 = fma(r37874, r37880, r37919);
return r37920;
}



Bits error versus x1



Bits error versus x2
Initial program 0.5
Simplified0.3
rmApplied sub-neg0.3
Applied distribute-lft-in0.3
Simplified0.3
rmApplied flip3-+0.3
Applied associate-/r/0.3
Applied fma-neg0.3
Final simplification0.3
herbie shell --seed 2019353 +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))))))