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(\sqrt[3]{\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)} \cdot \sqrt[3]{\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 \sqrt[3]{\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)double f(double x1, double x2) {
double r45567 = x1;
double r45568 = 2.0;
double r45569 = r45568 * r45567;
double r45570 = 3.0;
double r45571 = r45570 * r45567;
double r45572 = r45571 * r45567;
double r45573 = x2;
double r45574 = r45568 * r45573;
double r45575 = r45572 + r45574;
double r45576 = r45575 - r45567;
double r45577 = r45567 * r45567;
double r45578 = 1.0;
double r45579 = r45577 + r45578;
double r45580 = r45576 / r45579;
double r45581 = r45569 * r45580;
double r45582 = r45580 - r45570;
double r45583 = r45581 * r45582;
double r45584 = 4.0;
double r45585 = r45584 * r45580;
double r45586 = 6.0;
double r45587 = r45585 - r45586;
double r45588 = r45577 * r45587;
double r45589 = r45583 + r45588;
double r45590 = r45589 * r45579;
double r45591 = r45572 * r45580;
double r45592 = r45590 + r45591;
double r45593 = r45577 * r45567;
double r45594 = r45592 + r45593;
double r45595 = r45594 + r45567;
double r45596 = r45572 - r45574;
double r45597 = r45596 - r45567;
double r45598 = r45597 / r45579;
double r45599 = r45570 * r45598;
double r45600 = r45595 + r45599;
double r45601 = r45567 + r45600;
return r45601;
}
double f(double x1, double x2) {
double r45602 = x1;
double r45603 = 2.0;
double r45604 = r45603 * r45602;
double r45605 = 3.0;
double r45606 = r45605 * r45602;
double r45607 = r45606 * r45602;
double r45608 = x2;
double r45609 = r45603 * r45608;
double r45610 = r45607 + r45609;
double r45611 = r45610 - r45602;
double r45612 = r45602 * r45602;
double r45613 = 1.0;
double r45614 = r45612 + r45613;
double r45615 = r45611 / r45614;
double r45616 = r45604 * r45615;
double r45617 = r45615 - r45605;
double r45618 = r45616 * r45617;
double r45619 = 4.0;
double r45620 = r45619 * r45615;
double r45621 = 6.0;
double r45622 = r45620 - r45621;
double r45623 = r45612 * r45622;
double r45624 = cbrt(r45623);
double r45625 = r45624 * r45624;
double r45626 = r45625 * r45624;
double r45627 = r45618 + r45626;
double r45628 = r45627 * r45614;
double r45629 = r45607 * r45615;
double r45630 = r45628 + r45629;
double r45631 = r45612 * r45602;
double r45632 = r45630 + r45631;
double r45633 = r45632 + r45602;
double r45634 = r45607 - r45609;
double r45635 = r45634 - r45602;
double r45636 = r45635 / r45614;
double r45637 = r45605 * r45636;
double r45638 = r45633 + r45637;
double r45639 = r45602 + r45638;
return r45639;
}



Bits error versus x1



Bits error versus x2
Results
Initial program 0.5
rmApplied add-cube-cbrt0.6
Final simplification0.6
herbie shell --seed 2020033
(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))))))