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(\left(\frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{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(\sqrt[3]{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)} \cdot \sqrt[3]{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) \cdot \sqrt[3]{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 r40800 = x1;
double r40801 = 2.0;
double r40802 = r40801 * r40800;
double r40803 = 3.0;
double r40804 = r40803 * r40800;
double r40805 = r40804 * r40800;
double r40806 = x2;
double r40807 = r40801 * r40806;
double r40808 = r40805 + r40807;
double r40809 = r40808 - r40800;
double r40810 = r40800 * r40800;
double r40811 = 1.0;
double r40812 = r40810 + r40811;
double r40813 = r40809 / r40812;
double r40814 = r40802 * r40813;
double r40815 = r40813 - r40803;
double r40816 = r40814 * r40815;
double r40817 = 4.0;
double r40818 = r40817 * r40813;
double r40819 = 6.0;
double r40820 = r40818 - r40819;
double r40821 = r40810 * r40820;
double r40822 = r40816 + r40821;
double r40823 = r40822 * r40812;
double r40824 = r40805 * r40813;
double r40825 = r40823 + r40824;
double r40826 = r40810 * r40800;
double r40827 = r40825 + r40826;
double r40828 = r40827 + r40800;
double r40829 = r40805 - r40807;
double r40830 = r40829 - r40800;
double r40831 = r40830 / r40812;
double r40832 = r40803 * r40831;
double r40833 = r40828 + r40832;
double r40834 = r40800 + r40833;
return r40834;
}
double f(double x1, double x2) {
double r40835 = 3.0;
double r40836 = x1;
double r40837 = 1.0;
double r40838 = fma(r40836, r40836, r40837);
double r40839 = r40835 / r40838;
double r40840 = r40836 * r40836;
double r40841 = x2;
double r40842 = 2.0;
double r40843 = fma(r40841, r40842, r40836);
double r40844 = -r40843;
double r40845 = fma(r40835, r40840, r40844);
double r40846 = r40842 * r40841;
double r40847 = r40846 - r40836;
double r40848 = fma(r40835, r40840, r40847);
double r40849 = r40835 * r40836;
double r40850 = r40849 * r40836;
double r40851 = r40848 * r40850;
double r40852 = r40851 / r40838;
double r40853 = r40836 + r40852;
double r40854 = r40850 + r40846;
double r40855 = r40854 - r40836;
double r40856 = r40840 + r40837;
double r40857 = r40855 / r40856;
double r40858 = r40857 - r40835;
double r40859 = r40858 * r40842;
double r40860 = r40836 * r40848;
double r40861 = r40860 / r40838;
double r40862 = 4.0;
double r40863 = r40848 * r40862;
double r40864 = r40863 / r40838;
double r40865 = 6.0;
double r40866 = -r40865;
double r40867 = r40836 * r40866;
double r40868 = fma(r40836, r40864, r40867);
double r40869 = r40836 * r40868;
double r40870 = cbrt(r40869);
double r40871 = r40870 * r40870;
double r40872 = r40871 * r40870;
double r40873 = fma(r40859, r40861, r40872);
double r40874 = fma(r40836, r40840, r40836);
double r40875 = fma(r40873, r40838, r40874);
double r40876 = r40853 + r40875;
double r40877 = fma(r40839, r40845, r40876);
return r40877;
}



Bits error versus x1



Bits error versus x2
Initial program 0.5
Simplified0.3
rmApplied associate-*l*0.3
Simplified0.3
rmApplied add-cube-cbrt0.4
Final simplification0.4
herbie shell --seed 2020033 +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))))))