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(\frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1} - 3\right) + \left(\left(\sqrt[3]{4 \cdot \frac{\mathsf{fma}\left(3 \cdot x1, x1, 2 \cdot x2\right) - x1}{\mathsf{fma}\left(x1, x1, 1\right)} - 6} \cdot \sqrt[3]{4 \cdot \frac{\mathsf{fma}\left(3 \cdot x1, x1, 2 \cdot x2\right) - x1}{\mathsf{fma}\left(x1, x1, 1\right)} - 6}\right) \cdot \left(x1 \cdot x1\right)\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 r87709 = x1;
double r87710 = 2.0;
double r87711 = r87710 * r87709;
double r87712 = 3.0;
double r87713 = r87712 * r87709;
double r87714 = r87713 * r87709;
double r87715 = x2;
double r87716 = r87710 * r87715;
double r87717 = r87714 + r87716;
double r87718 = r87717 - r87709;
double r87719 = r87709 * r87709;
double r87720 = 1.0;
double r87721 = r87719 + r87720;
double r87722 = r87718 / r87721;
double r87723 = r87711 * r87722;
double r87724 = r87722 - r87712;
double r87725 = r87723 * r87724;
double r87726 = 4.0;
double r87727 = r87726 * r87722;
double r87728 = 6.0;
double r87729 = r87727 - r87728;
double r87730 = r87719 * r87729;
double r87731 = r87725 + r87730;
double r87732 = r87731 * r87721;
double r87733 = r87714 * r87722;
double r87734 = r87732 + r87733;
double r87735 = r87719 * r87709;
double r87736 = r87734 + r87735;
double r87737 = r87736 + r87709;
double r87738 = r87714 - r87716;
double r87739 = r87738 - r87709;
double r87740 = r87739 / r87721;
double r87741 = r87712 * r87740;
double r87742 = r87737 + r87741;
double r87743 = r87709 + r87742;
return r87743;
}
double f(double x1, double x2) {
double r87744 = x1;
double r87745 = 2.0;
double r87746 = r87745 * r87744;
double r87747 = 3.0;
double r87748 = r87747 * r87744;
double r87749 = r87748 * r87744;
double r87750 = x2;
double r87751 = r87745 * r87750;
double r87752 = r87749 + r87751;
double r87753 = r87752 - r87744;
double r87754 = r87744 * r87744;
double r87755 = 1.0;
double r87756 = r87754 + r87755;
double r87757 = r87753 / r87756;
double r87758 = r87746 * r87757;
double r87759 = r87757 - r87747;
double r87760 = r87758 * r87759;
double r87761 = 4.0;
double r87762 = fma(r87748, r87744, r87751);
double r87763 = r87762 - r87744;
double r87764 = fma(r87744, r87744, r87755);
double r87765 = r87763 / r87764;
double r87766 = r87761 * r87765;
double r87767 = 6.0;
double r87768 = r87766 - r87767;
double r87769 = cbrt(r87768);
double r87770 = r87769 * r87769;
double r87771 = r87770 * r87754;
double r87772 = r87761 * r87757;
double r87773 = r87772 - r87767;
double r87774 = cbrt(r87773);
double r87775 = r87771 * r87774;
double r87776 = r87760 + r87775;
double r87777 = r87776 * r87756;
double r87778 = r87749 * r87757;
double r87779 = r87777 + r87778;
double r87780 = r87754 * r87744;
double r87781 = r87779 + r87780;
double r87782 = r87781 + r87744;
double r87783 = r87749 - r87751;
double r87784 = r87783 - r87744;
double r87785 = r87784 / r87756;
double r87786 = r87747 * r87785;
double r87787 = r87782 + r87786;
double r87788 = r87744 + r87787;
return r87788;
}



Bits error versus x1



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