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)\mathsf{fma}\left(\frac{\mathsf{fma}\left(3, x1 \cdot x1, -\mathsf{fma}\left(2, x2, x1\right)\right)}{\mathsf{fma}\left(x1, x1, 1\right)}, 3, x1 + \mathsf{fma}\left(\mathsf{fma}\left(x1, x1, 1\right), \mathsf{fma}\left(\left(2 \cdot x1\right) \cdot \frac{\mathsf{fma}\left(3 \cdot x1, x1, 2 \cdot x2\right) - x1}{\mathsf{fma}\left(x1, x1, 1\right)}, \mathsf{fma}\left(\sqrt[3]{\mathsf{fma}\left(3 \cdot x1, x1, 2 \cdot x2\right) - x1} \cdot \sqrt[3]{\mathsf{fma}\left(3 \cdot x1, x1, 2 \cdot x2\right) - x1}, \frac{\sqrt[3]{\mathsf{fma}\left(3 \cdot x1, x1, 2 \cdot x2\right) - x1}}{\mathsf{fma}\left(x1, x1, 1\right)}, -3\right), \mathsf{fma}\left(x1, x1 \cdot \left(4 \cdot \frac{\mathsf{fma}\left(3 \cdot x1, x1, 2 \cdot x2\right) - x1}{\mathsf{fma}\left(x1, x1, 1\right)} - 6\right), \left(\left(-3\right) + 3\right) \cdot \frac{\left(\mathsf{fma}\left(3 \cdot x1, x1, 2 \cdot x2\right) - x1\right) \cdot \left(2 \cdot x1\right)}{\mathsf{fma}\left(x1, x1, 1\right)}\right)\right), \mathsf{fma}\left(3 \cdot x1, \frac{\mathsf{fma}\left(3 \cdot x1, x1, 2 \cdot x2\right) - x1}{\mathsf{fma}\left(x1, x1, 1\right)} \cdot x1, {x1}^{3}\right)\right)\right) + x1double f(double x1, double x2) {
double r65616 = x1;
double r65617 = 2.0;
double r65618 = r65617 * r65616;
double r65619 = 3.0;
double r65620 = r65619 * r65616;
double r65621 = r65620 * r65616;
double r65622 = x2;
double r65623 = r65617 * r65622;
double r65624 = r65621 + r65623;
double r65625 = r65624 - r65616;
double r65626 = r65616 * r65616;
double r65627 = 1.0;
double r65628 = r65626 + r65627;
double r65629 = r65625 / r65628;
double r65630 = r65618 * r65629;
double r65631 = r65629 - r65619;
double r65632 = r65630 * r65631;
double r65633 = 4.0;
double r65634 = r65633 * r65629;
double r65635 = 6.0;
double r65636 = r65634 - r65635;
double r65637 = r65626 * r65636;
double r65638 = r65632 + r65637;
double r65639 = r65638 * r65628;
double r65640 = r65621 * r65629;
double r65641 = r65639 + r65640;
double r65642 = r65626 * r65616;
double r65643 = r65641 + r65642;
double r65644 = r65643 + r65616;
double r65645 = r65621 - r65623;
double r65646 = r65645 - r65616;
double r65647 = r65646 / r65628;
double r65648 = r65619 * r65647;
double r65649 = r65644 + r65648;
double r65650 = r65616 + r65649;
return r65650;
}
double f(double x1, double x2) {
double r65651 = 3.0;
double r65652 = x1;
double r65653 = r65652 * r65652;
double r65654 = 2.0;
double r65655 = x2;
double r65656 = fma(r65654, r65655, r65652);
double r65657 = -r65656;
double r65658 = fma(r65651, r65653, r65657);
double r65659 = 1.0;
double r65660 = fma(r65652, r65652, r65659);
double r65661 = r65658 / r65660;
double r65662 = r65654 * r65652;
double r65663 = r65651 * r65652;
double r65664 = r65654 * r65655;
double r65665 = fma(r65663, r65652, r65664);
double r65666 = r65665 - r65652;
double r65667 = r65666 / r65660;
double r65668 = r65662 * r65667;
double r65669 = cbrt(r65666);
double r65670 = r65669 * r65669;
double r65671 = r65669 / r65660;
double r65672 = -r65651;
double r65673 = fma(r65670, r65671, r65672);
double r65674 = 4.0;
double r65675 = r65674 * r65667;
double r65676 = 6.0;
double r65677 = r65675 - r65676;
double r65678 = r65652 * r65677;
double r65679 = r65672 + r65651;
double r65680 = r65666 * r65662;
double r65681 = r65680 / r65660;
double r65682 = r65679 * r65681;
double r65683 = fma(r65652, r65678, r65682);
double r65684 = fma(r65668, r65673, r65683);
double r65685 = r65667 * r65652;
double r65686 = 3.0;
double r65687 = pow(r65652, r65686);
double r65688 = fma(r65663, r65685, r65687);
double r65689 = fma(r65660, r65684, r65688);
double r65690 = r65652 + r65689;
double r65691 = fma(r65661, r65651, r65690);
double r65692 = r65691 + r65652;
return r65692;
}



Bits error versus x1



Bits error versus x2
Initial program 0.5
rmApplied add-sqr-sqrt0.5
Applied *-un-lft-identity0.5
Applied add-cube-cbrt0.6
Applied times-frac0.6
Applied prod-diff0.6
Applied distribute-lft-in0.6
Applied associate-+l+0.6
Simplified0.6
Simplified0.4
Final simplification0.4
herbie shell --seed 2019208 +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))))))