x1 + \left(\left(\left(\left(\left(\left(\left(2.0 \cdot x1\right) \cdot \frac{\left(\left(3.0 \cdot x1\right) \cdot x1 + 2.0 \cdot x2\right) - x1}{x1 \cdot x1 + 1.0}\right) \cdot \left(\frac{\left(\left(3.0 \cdot x1\right) \cdot x1 + 2.0 \cdot x2\right) - x1}{x1 \cdot x1 + 1.0} - 3.0\right) + \left(x1 \cdot x1\right) \cdot \left(4.0 \cdot \frac{\left(\left(3.0 \cdot x1\right) \cdot x1 + 2.0 \cdot x2\right) - x1}{x1 \cdot x1 + 1.0} - 6.0\right)\right) \cdot \left(x1 \cdot x1 + 1.0\right) + \left(\left(3.0 \cdot x1\right) \cdot x1\right) \cdot \frac{\left(\left(3.0 \cdot x1\right) \cdot x1 + 2.0 \cdot x2\right) - x1}{x1 \cdot x1 + 1.0}\right) + \left(x1 \cdot x1\right) \cdot x1\right) + x1\right) + 3.0 \cdot \frac{\left(\left(3.0 \cdot x1\right) \cdot x1 - 2.0 \cdot x2\right) - x1}{x1 \cdot x1 + 1.0}\right)\left(\left(\left(x1 \cdot \left(x1 \cdot x1\right) + \left(\frac{\left(x2 \cdot \left(x1 \cdot \left(x1 \cdot 6.0\right)\right) - 3.0 \cdot \left(x1 \cdot \left(x1 \cdot x1\right)\right)\right) + \left(x1 \cdot x1\right) \cdot \left(\left(x1 \cdot x1\right) \cdot 9.0\right)}{1.0 \cdot \left(1.0 \cdot 1.0\right) + \left(\left(x1 \cdot x1\right) \cdot \left(x1 \cdot x1\right)\right) \cdot \left(x1 \cdot x1\right)} \cdot \left(\left(1.0 \cdot 1.0 - \left(x1 \cdot x1\right) \cdot 1.0\right) + \left(x1 \cdot x1\right) \cdot \left(x1 \cdot x1\right)\right) + \left(1.0 + x1 \cdot x1\right) \cdot \left(\left(\left(x1 \cdot x1\right) \cdot \left(\sqrt[3]{4.0 \cdot \frac{\left(\left(3.0 \cdot x1\right) \cdot x1 + x2 \cdot 2.0\right) - x1}{1.0 + x1 \cdot x1} - 6.0} \cdot \sqrt[3]{4.0 \cdot \frac{\left(\left(3.0 \cdot x1\right) \cdot x1 + x2 \cdot 2.0\right) - x1}{1.0 + x1 \cdot x1} - 6.0}\right)\right) \cdot \sqrt[3]{4.0 \cdot \frac{\left(\left(3.0 \cdot x1\right) \cdot x1 + x2 \cdot 2.0\right) - x1}{1.0 + x1 \cdot x1} - 6.0} + \left(\frac{\left(\left(3.0 \cdot x1\right) \cdot x1 + x2 \cdot 2.0\right) - x1}{1.0 + x1 \cdot x1} - 3.0\right) \cdot \left(\left(x1 \cdot 2.0\right) \cdot \frac{\left(\left(3.0 \cdot x1\right) \cdot x1 + x2 \cdot 2.0\right) - x1}{1.0 + x1 \cdot x1}\right)\right)\right)\right) + x1\right) + \frac{\left(\left(3.0 \cdot x1\right) \cdot x1 - x2 \cdot 2.0\right) - x1}{1.0 + x1 \cdot x1} \cdot 3.0\right) + x1double f(double x1, double x2) {
double r2627564 = x1;
double r2627565 = 2.0;
double r2627566 = r2627565 * r2627564;
double r2627567 = 3.0;
double r2627568 = r2627567 * r2627564;
double r2627569 = r2627568 * r2627564;
double r2627570 = x2;
double r2627571 = r2627565 * r2627570;
double r2627572 = r2627569 + r2627571;
double r2627573 = r2627572 - r2627564;
double r2627574 = r2627564 * r2627564;
double r2627575 = 1.0;
double r2627576 = r2627574 + r2627575;
double r2627577 = r2627573 / r2627576;
double r2627578 = r2627566 * r2627577;
double r2627579 = r2627577 - r2627567;
double r2627580 = r2627578 * r2627579;
double r2627581 = 4.0;
double r2627582 = r2627581 * r2627577;
double r2627583 = 6.0;
double r2627584 = r2627582 - r2627583;
double r2627585 = r2627574 * r2627584;
double r2627586 = r2627580 + r2627585;
double r2627587 = r2627586 * r2627576;
double r2627588 = r2627569 * r2627577;
double r2627589 = r2627587 + r2627588;
double r2627590 = r2627574 * r2627564;
double r2627591 = r2627589 + r2627590;
double r2627592 = r2627591 + r2627564;
double r2627593 = r2627569 - r2627571;
double r2627594 = r2627593 - r2627564;
double r2627595 = r2627594 / r2627576;
double r2627596 = r2627567 * r2627595;
double r2627597 = r2627592 + r2627596;
double r2627598 = r2627564 + r2627597;
return r2627598;
}
double f(double x1, double x2) {
double r2627599 = x1;
double r2627600 = r2627599 * r2627599;
double r2627601 = r2627599 * r2627600;
double r2627602 = x2;
double r2627603 = 6.0;
double r2627604 = r2627599 * r2627603;
double r2627605 = r2627599 * r2627604;
double r2627606 = r2627602 * r2627605;
double r2627607 = 3.0;
double r2627608 = r2627607 * r2627601;
double r2627609 = r2627606 - r2627608;
double r2627610 = 9.0;
double r2627611 = r2627600 * r2627610;
double r2627612 = r2627600 * r2627611;
double r2627613 = r2627609 + r2627612;
double r2627614 = 1.0;
double r2627615 = r2627614 * r2627614;
double r2627616 = r2627614 * r2627615;
double r2627617 = r2627600 * r2627600;
double r2627618 = r2627617 * r2627600;
double r2627619 = r2627616 + r2627618;
double r2627620 = r2627613 / r2627619;
double r2627621 = r2627600 * r2627614;
double r2627622 = r2627615 - r2627621;
double r2627623 = r2627622 + r2627617;
double r2627624 = r2627620 * r2627623;
double r2627625 = r2627614 + r2627600;
double r2627626 = 4.0;
double r2627627 = r2627607 * r2627599;
double r2627628 = r2627627 * r2627599;
double r2627629 = 2.0;
double r2627630 = r2627602 * r2627629;
double r2627631 = r2627628 + r2627630;
double r2627632 = r2627631 - r2627599;
double r2627633 = r2627632 / r2627625;
double r2627634 = r2627626 * r2627633;
double r2627635 = r2627634 - r2627603;
double r2627636 = cbrt(r2627635);
double r2627637 = r2627636 * r2627636;
double r2627638 = r2627600 * r2627637;
double r2627639 = r2627638 * r2627636;
double r2627640 = r2627633 - r2627607;
double r2627641 = r2627599 * r2627629;
double r2627642 = r2627641 * r2627633;
double r2627643 = r2627640 * r2627642;
double r2627644 = r2627639 + r2627643;
double r2627645 = r2627625 * r2627644;
double r2627646 = r2627624 + r2627645;
double r2627647 = r2627601 + r2627646;
double r2627648 = r2627647 + r2627599;
double r2627649 = r2627628 - r2627630;
double r2627650 = r2627649 - r2627599;
double r2627651 = r2627650 / r2627625;
double r2627652 = r2627651 * r2627607;
double r2627653 = r2627648 + r2627652;
double r2627654 = r2627653 + r2627599;
return r2627654;
}



Bits error versus x1



Bits error versus x2
Results
Initial program 0.5
rmApplied flip3-+0.5
Applied associate-/r/0.5
Applied associate-*r*0.5
Simplified0.5
Taylor expanded around 0 0.5
Simplified0.5
rmApplied add-cube-cbrt0.6
Applied associate-*r*0.6
Final simplification0.6
herbie shell --seed 2019165
(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))))))