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 \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) + \left(\left(\left(x1 \cdot x1\right) \cdot \sqrt[3]{\frac{\mathsf{fma}\left(3 \cdot x1, x1, 2 \cdot x2\right) - x1}{\mathsf{fma}\left(x1, x1, 1\right)} \cdot 4 - 6}\right) \cdot \sqrt[3]{\frac{\mathsf{fma}\left(3 \cdot x1, x1, 2 \cdot x2\right) - x1}{\mathsf{fma}\left(x1, x1, 1\right)} \cdot 4 - 6}\right) \cdot \sqrt[3]{4 \cdot \frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1} - 6}\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)double f(double x1, double x2) {
double r72681 = x1;
double r72682 = 2.0;
double r72683 = r72682 * r72681;
double r72684 = 3.0;
double r72685 = r72684 * r72681;
double r72686 = r72685 * r72681;
double r72687 = x2;
double r72688 = r72682 * r72687;
double r72689 = r72686 + r72688;
double r72690 = r72689 - r72681;
double r72691 = r72681 * r72681;
double r72692 = 1.0;
double r72693 = r72691 + r72692;
double r72694 = r72690 / r72693;
double r72695 = r72683 * r72694;
double r72696 = r72694 - r72684;
double r72697 = r72695 * r72696;
double r72698 = 4.0;
double r72699 = r72698 * r72694;
double r72700 = 6.0;
double r72701 = r72699 - r72700;
double r72702 = r72691 * r72701;
double r72703 = r72697 + r72702;
double r72704 = r72703 * r72693;
double r72705 = r72686 * r72694;
double r72706 = r72704 + r72705;
double r72707 = r72691 * r72681;
double r72708 = r72706 + r72707;
double r72709 = r72708 + r72681;
double r72710 = r72686 - r72688;
double r72711 = r72710 - r72681;
double r72712 = r72711 / r72693;
double r72713 = r72684 * r72712;
double r72714 = r72709 + r72713;
double r72715 = r72681 + r72714;
return r72715;
}
double f(double x1, double x2) {
double r72716 = x1;
double r72717 = 2.0;
double r72718 = r72717 * r72716;
double r72719 = 3.0;
double r72720 = r72719 * r72716;
double r72721 = r72720 * r72716;
double r72722 = x2;
double r72723 = r72717 * r72722;
double r72724 = r72721 + r72723;
double r72725 = r72724 - r72716;
double r72726 = r72716 * r72716;
double r72727 = 1.0;
double r72728 = r72726 + r72727;
double r72729 = r72725 / r72728;
double r72730 = r72718 * r72729;
double r72731 = 3.0;
double r72732 = pow(r72726, r72731);
double r72733 = pow(r72727, r72731);
double r72734 = r72732 + r72733;
double r72735 = r72725 / r72734;
double r72736 = r72726 * r72726;
double r72737 = r72727 * r72727;
double r72738 = r72726 * r72727;
double r72739 = r72737 - r72738;
double r72740 = r72736 + r72739;
double r72741 = -r72719;
double r72742 = fma(r72735, r72740, r72741);
double r72743 = r72730 * r72742;
double r72744 = fma(r72720, r72716, r72723);
double r72745 = r72744 - r72716;
double r72746 = fma(r72716, r72716, r72727);
double r72747 = r72745 / r72746;
double r72748 = 4.0;
double r72749 = r72747 * r72748;
double r72750 = 6.0;
double r72751 = r72749 - r72750;
double r72752 = cbrt(r72751);
double r72753 = r72726 * r72752;
double r72754 = r72753 * r72752;
double r72755 = r72748 * r72729;
double r72756 = r72755 - r72750;
double r72757 = cbrt(r72756);
double r72758 = r72754 * r72757;
double r72759 = r72743 + r72758;
double r72760 = r72759 * r72728;
double r72761 = r72721 * r72729;
double r72762 = r72760 + r72761;
double r72763 = r72726 * r72716;
double r72764 = r72762 + r72763;
double r72765 = r72764 + r72716;
double r72766 = r72721 - r72723;
double r72767 = r72766 - r72716;
double r72768 = r72767 / r72728;
double r72769 = r72719 * r72768;
double r72770 = r72765 + r72769;
double r72771 = r72716 + r72770;
return r72771;
}



Bits error versus x1



Bits error versus x2
Initial program 0.5
rmApplied flip3-+0.6
Applied associate-/r/0.6
Applied fma-neg0.6
rmApplied add-cube-cbrt0.7
Applied associate-*r*0.7
Simplified0.7
Final simplification0.7
herbie shell --seed 2019199 +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))))))