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)}, x1 \cdot \mathsf{fma}\left(x1, \frac{\mathsf{fma}\left(3, x1 \cdot x1, 2 \cdot x2 - x1\right) \cdot 4}{\mathsf{fma}\left(x1, x1, 1\right)}, x1 \cdot \left(-6\right)\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 r39822 = x1;
double r39823 = 2.0;
double r39824 = r39823 * r39822;
double r39825 = 3.0;
double r39826 = r39825 * r39822;
double r39827 = r39826 * r39822;
double r39828 = x2;
double r39829 = r39823 * r39828;
double r39830 = r39827 + r39829;
double r39831 = r39830 - r39822;
double r39832 = r39822 * r39822;
double r39833 = 1.0;
double r39834 = r39832 + r39833;
double r39835 = r39831 / r39834;
double r39836 = r39824 * r39835;
double r39837 = r39835 - r39825;
double r39838 = r39836 * r39837;
double r39839 = 4.0;
double r39840 = r39839 * r39835;
double r39841 = 6.0;
double r39842 = r39840 - r39841;
double r39843 = r39832 * r39842;
double r39844 = r39838 + r39843;
double r39845 = r39844 * r39834;
double r39846 = r39827 * r39835;
double r39847 = r39845 + r39846;
double r39848 = r39832 * r39822;
double r39849 = r39847 + r39848;
double r39850 = r39849 + r39822;
double r39851 = r39827 - r39829;
double r39852 = r39851 - r39822;
double r39853 = r39852 / r39834;
double r39854 = r39825 * r39853;
double r39855 = r39850 + r39854;
double r39856 = r39822 + r39855;
return r39856;
}
double f(double x1, double x2) {
double r39857 = 3.0;
double r39858 = x1;
double r39859 = 1.0;
double r39860 = fma(r39858, r39858, r39859);
double r39861 = r39857 / r39860;
double r39862 = r39858 * r39858;
double r39863 = x2;
double r39864 = 2.0;
double r39865 = fma(r39863, r39864, r39858);
double r39866 = -r39865;
double r39867 = fma(r39857, r39862, r39866);
double r39868 = r39864 * r39863;
double r39869 = r39868 - r39858;
double r39870 = fma(r39857, r39862, r39869);
double r39871 = r39857 * r39858;
double r39872 = r39871 * r39858;
double r39873 = r39870 * r39872;
double r39874 = r39873 / r39860;
double r39875 = r39858 + r39874;
double r39876 = r39872 + r39868;
double r39877 = r39876 - r39858;
double r39878 = 3.0;
double r39879 = pow(r39862, r39878);
double r39880 = pow(r39859, r39878);
double r39881 = r39879 + r39880;
double r39882 = r39877 / r39881;
double r39883 = r39862 * r39862;
double r39884 = r39859 * r39859;
double r39885 = r39862 * r39859;
double r39886 = r39884 - r39885;
double r39887 = r39883 + r39886;
double r39888 = -r39857;
double r39889 = fma(r39882, r39887, r39888);
double r39890 = r39889 * r39864;
double r39891 = r39858 * r39870;
double r39892 = r39891 / r39860;
double r39893 = 4.0;
double r39894 = r39870 * r39893;
double r39895 = r39894 / r39860;
double r39896 = 6.0;
double r39897 = -r39896;
double r39898 = r39858 * r39897;
double r39899 = fma(r39858, r39895, r39898);
double r39900 = r39858 * r39899;
double r39901 = fma(r39890, r39892, r39900);
double r39902 = fma(r39858, r39862, r39858);
double r39903 = fma(r39901, r39860, r39902);
double r39904 = r39875 + r39903;
double r39905 = fma(r39861, r39867, r39904);
return r39905;
}



Bits error versus x1



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