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{\left(3 \cdot x1\right) \cdot x1 - \mathsf{fma}\left(2, x2, x1\right)}{\mathsf{fma}\left(x1, x1, 1\right)}, 3, \mathsf{fma}\left(\mathsf{fma}\left(x1 \cdot x1, \left(-6\right) + 6, \mathsf{fma}\left(x1 \cdot x1, 4 \cdot \frac{\mathsf{fma}\left(3 \cdot x1, x1, 2 \cdot x2\right) - x1}{\mathsf{fma}\left(x1, x1, 1\right)} - 6, \left(\left(\sqrt[3]{\frac{\mathsf{fma}\left(3 \cdot x1, x1, 2 \cdot x2\right) - x1}{\mathsf{fma}\left(x1, x1, 1\right)} - 3} \cdot \sqrt[3]{\frac{\mathsf{fma}\left(3 \cdot x1, x1, 2 \cdot x2\right) - x1}{\mathsf{fma}\left(x1, x1, 1\right)} - 3}\right) \cdot \sqrt[3]{\frac{\mathsf{fma}\left(3 \cdot x1, x1, 2 \cdot x2\right) - x1}{\mathsf{fma}\left(x1, x1, 1\right)} - 3}\right) \cdot \left(2 \cdot \left(\frac{\mathsf{fma}\left(3 \cdot x1, x1, 2 \cdot x2\right) - x1}{\mathsf{fma}\left(x1, x1, 1\right)} \cdot x1\right)\right)\right)\right), \mathsf{fma}\left(x1, x1, 1\right), \mathsf{fma}\left(3 \cdot x1, \frac{\mathsf{fma}\left(3 \cdot x1, x1, 2 \cdot x2\right) - x1}{\mathsf{fma}\left(x1, x1, 1\right)} \cdot x1, {x1}^{3}\right)\right) + x1\right) + x1double f(double x1, double x2) {
double r65769 = x1;
double r65770 = 2.0;
double r65771 = r65770 * r65769;
double r65772 = 3.0;
double r65773 = r65772 * r65769;
double r65774 = r65773 * r65769;
double r65775 = x2;
double r65776 = r65770 * r65775;
double r65777 = r65774 + r65776;
double r65778 = r65777 - r65769;
double r65779 = r65769 * r65769;
double r65780 = 1.0;
double r65781 = r65779 + r65780;
double r65782 = r65778 / r65781;
double r65783 = r65771 * r65782;
double r65784 = r65782 - r65772;
double r65785 = r65783 * r65784;
double r65786 = 4.0;
double r65787 = r65786 * r65782;
double r65788 = 6.0;
double r65789 = r65787 - r65788;
double r65790 = r65779 * r65789;
double r65791 = r65785 + r65790;
double r65792 = r65791 * r65781;
double r65793 = r65774 * r65782;
double r65794 = r65792 + r65793;
double r65795 = r65779 * r65769;
double r65796 = r65794 + r65795;
double r65797 = r65796 + r65769;
double r65798 = r65774 - r65776;
double r65799 = r65798 - r65769;
double r65800 = r65799 / r65781;
double r65801 = r65772 * r65800;
double r65802 = r65797 + r65801;
double r65803 = r65769 + r65802;
return r65803;
}
double f(double x1, double x2) {
double r65804 = 3.0;
double r65805 = x1;
double r65806 = r65804 * r65805;
double r65807 = r65806 * r65805;
double r65808 = 2.0;
double r65809 = x2;
double r65810 = fma(r65808, r65809, r65805);
double r65811 = r65807 - r65810;
double r65812 = 1.0;
double r65813 = fma(r65805, r65805, r65812);
double r65814 = r65811 / r65813;
double r65815 = r65805 * r65805;
double r65816 = 6.0;
double r65817 = -r65816;
double r65818 = r65817 + r65816;
double r65819 = 4.0;
double r65820 = r65808 * r65809;
double r65821 = fma(r65806, r65805, r65820);
double r65822 = r65821 - r65805;
double r65823 = r65822 / r65813;
double r65824 = r65819 * r65823;
double r65825 = r65824 - r65816;
double r65826 = r65823 - r65804;
double r65827 = cbrt(r65826);
double r65828 = r65827 * r65827;
double r65829 = r65828 * r65827;
double r65830 = r65823 * r65805;
double r65831 = r65808 * r65830;
double r65832 = r65829 * r65831;
double r65833 = fma(r65815, r65825, r65832);
double r65834 = fma(r65815, r65818, r65833);
double r65835 = 3.0;
double r65836 = pow(r65805, r65835);
double r65837 = fma(r65806, r65830, r65836);
double r65838 = fma(r65834, r65813, r65837);
double r65839 = r65838 + r65805;
double r65840 = fma(r65814, r65804, r65839);
double r65841 = r65840 + r65805;
return r65841;
}



Bits error versus x1



Bits error versus x2
Initial program 0.5
rmApplied add-cube-cbrt0.6
Applied prod-diff0.6
Applied distribute-lft-in0.6
Applied associate-+r+0.6
Simplified0.5
Simplified0.3
rmApplied add-cube-cbrt0.4
Final simplification0.4
herbie shell --seed 2019195 +o rules:numerics
(FPCore (x1 x2)
:name "Rosa's FloatVsDoubleBenchmark"
(+ x1 (+ (+ (+ (+ (* (+ (* (* (* 2.0 x1) (/ (- (+ (* (* 3.0 x1) x1) (* 2.0 x2)) x1) (+ (* x1 x1) 1.0))) (- (/ (- (+ (* (* 3.0 x1) x1) (* 2.0 x2)) x1) (+ (* x1 x1) 1.0)) 3.0)) (* (* x1 x1) (- (* 4.0 (/ (- (+ (* (* 3.0 x1) x1) (* 2.0 x2)) x1) (+ (* x1 x1) 1.0))) 6.0))) (+ (* x1 x1) 1.0)) (* (* (* 3.0 x1) x1) (/ (- (+ (* (* 3.0 x1) x1) (* 2.0 x2)) x1) (+ (* x1 x1) 1.0)))) (* (* x1 x1) x1)) x1) (* 3.0 (/ (- (- (* (* 3.0 x1) x1) (* 2.0 x2)) x1) (+ (* x1 x1) 1.0))))))