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)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(\left(\sqrt[3]{\frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1} - 3} \cdot \sqrt[3]{\frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1} - 3}\right) \cdot \sqrt[3]{\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(\left(3 \cdot x1\right) \cdot x1\right) \cdot \left(\sqrt[3]{\frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1}} \cdot \sqrt[3]{\frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1}}\right)\right) \cdot \sqrt[3]{\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)double f(double x1, double x2) {
double r111714 = x1;
double r111715 = 2.0;
double r111716 = r111715 * r111714;
double r111717 = 3.0;
double r111718 = r111717 * r111714;
double r111719 = r111718 * r111714;
double r111720 = x2;
double r111721 = r111715 * r111720;
double r111722 = r111719 + r111721;
double r111723 = r111722 - r111714;
double r111724 = r111714 * r111714;
double r111725 = 1.0;
double r111726 = r111724 + r111725;
double r111727 = r111723 / r111726;
double r111728 = r111716 * r111727;
double r111729 = r111727 - r111717;
double r111730 = r111728 * r111729;
double r111731 = 4.0;
double r111732 = r111731 * r111727;
double r111733 = 6.0;
double r111734 = r111732 - r111733;
double r111735 = r111724 * r111734;
double r111736 = r111730 + r111735;
double r111737 = r111736 * r111726;
double r111738 = r111719 * r111727;
double r111739 = r111737 + r111738;
double r111740 = r111724 * r111714;
double r111741 = r111739 + r111740;
double r111742 = r111741 + r111714;
double r111743 = r111719 - r111721;
double r111744 = r111743 - r111714;
double r111745 = r111744 / r111726;
double r111746 = r111717 * r111745;
double r111747 = r111742 + r111746;
double r111748 = r111714 + r111747;
return r111748;
}
double f(double x1, double x2) {
double r111749 = x1;
double r111750 = 2.0;
double r111751 = r111750 * r111749;
double r111752 = 3.0;
double r111753 = r111752 * r111749;
double r111754 = r111753 * r111749;
double r111755 = x2;
double r111756 = r111750 * r111755;
double r111757 = r111754 + r111756;
double r111758 = r111757 - r111749;
double r111759 = r111749 * r111749;
double r111760 = 1.0;
double r111761 = r111759 + r111760;
double r111762 = r111758 / r111761;
double r111763 = r111751 * r111762;
double r111764 = r111762 - r111752;
double r111765 = cbrt(r111764);
double r111766 = r111765 * r111765;
double r111767 = r111766 * r111765;
double r111768 = r111763 * r111767;
double r111769 = 4.0;
double r111770 = r111769 * r111762;
double r111771 = 6.0;
double r111772 = r111770 - r111771;
double r111773 = r111759 * r111772;
double r111774 = r111768 + r111773;
double r111775 = r111774 * r111761;
double r111776 = cbrt(r111762);
double r111777 = r111776 * r111776;
double r111778 = r111754 * r111777;
double r111779 = r111778 * r111776;
double r111780 = r111775 + r111779;
double r111781 = r111759 * r111749;
double r111782 = r111780 + r111781;
double r111783 = r111782 + r111749;
double r111784 = r111754 - r111756;
double r111785 = r111784 - r111749;
double r111786 = r111785 / r111761;
double r111787 = r111752 * r111786;
double r111788 = r111783 + r111787;
double r111789 = r111749 + r111788;
return r111789;
}



Bits error versus x1



Bits error versus x2
Results
Initial program 0.5
rmApplied add-cube-cbrt0.7
rmApplied add-cube-cbrt0.7
Applied associate-*r*0.7
Final simplification0.7
herbie shell --seed 2020047
(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))))))