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)\left(\left(x1 + 3 \cdot \frac{\left(\left(3 \cdot x1\right) \cdot x1 - 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1}\right) + \left(x1 + \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(4 \cdot \frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1}\right) \cdot \left(x1 \cdot x1\right)\right) + \left(x1 \cdot x1\right) \cdot \left(-6\right)\right) \cdot \left(x1 \cdot x1 + 1\right)\right)\right) + \left(x1 \cdot x1\right) \cdot \left(x1 + \frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1} \cdot 3\right)double f(double x1, double x2) {
double r53683 = x1;
double r53684 = 2.0;
double r53685 = r53684 * r53683;
double r53686 = 3.0;
double r53687 = r53686 * r53683;
double r53688 = r53687 * r53683;
double r53689 = x2;
double r53690 = r53684 * r53689;
double r53691 = r53688 + r53690;
double r53692 = r53691 - r53683;
double r53693 = r53683 * r53683;
double r53694 = 1.0;
double r53695 = r53693 + r53694;
double r53696 = r53692 / r53695;
double r53697 = r53685 * r53696;
double r53698 = r53696 - r53686;
double r53699 = r53697 * r53698;
double r53700 = 4.0;
double r53701 = r53700 * r53696;
double r53702 = 6.0;
double r53703 = r53701 - r53702;
double r53704 = r53693 * r53703;
double r53705 = r53699 + r53704;
double r53706 = r53705 * r53695;
double r53707 = r53688 * r53696;
double r53708 = r53706 + r53707;
double r53709 = r53693 * r53683;
double r53710 = r53708 + r53709;
double r53711 = r53710 + r53683;
double r53712 = r53688 - r53690;
double r53713 = r53712 - r53683;
double r53714 = r53713 / r53695;
double r53715 = r53686 * r53714;
double r53716 = r53711 + r53715;
double r53717 = r53683 + r53716;
return r53717;
}
double f(double x1, double x2) {
double r53718 = x1;
double r53719 = 3.0;
double r53720 = r53719 * r53718;
double r53721 = r53720 * r53718;
double r53722 = 2.0;
double r53723 = x2;
double r53724 = r53722 * r53723;
double r53725 = r53721 - r53724;
double r53726 = r53725 - r53718;
double r53727 = r53718 * r53718;
double r53728 = 1.0;
double r53729 = r53727 + r53728;
double r53730 = r53726 / r53729;
double r53731 = r53719 * r53730;
double r53732 = r53718 + r53731;
double r53733 = r53722 * r53718;
double r53734 = r53721 + r53724;
double r53735 = r53734 - r53718;
double r53736 = r53735 / r53729;
double r53737 = r53733 * r53736;
double r53738 = r53736 - r53719;
double r53739 = r53737 * r53738;
double r53740 = 4.0;
double r53741 = r53740 * r53736;
double r53742 = r53741 * r53727;
double r53743 = r53739 + r53742;
double r53744 = 6.0;
double r53745 = -r53744;
double r53746 = r53727 * r53745;
double r53747 = r53743 + r53746;
double r53748 = r53747 * r53729;
double r53749 = r53718 + r53748;
double r53750 = r53732 + r53749;
double r53751 = r53736 * r53719;
double r53752 = r53718 + r53751;
double r53753 = r53727 * r53752;
double r53754 = r53750 + r53753;
return r53754;
}



Bits error versus x1



Bits error versus x2
Results
Initial program 0.5
Simplified0.5
rmApplied sub-neg0.5
Applied distribute-lft-in0.5
Applied associate-+r+0.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2020081
(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))))))