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{3}{\mathsf{fma}\left(x1, x1, 1\right)}, \mathsf{fma}\left(3, x1 \cdot x1, -\mathsf{fma}\left(x2, 2, x1\right)\right), \left(x1 + \frac{\mathsf{fma}\left(3, x1 \cdot x1, 2 \cdot x2 - x1\right) \cdot \left(\left(3 \cdot x1\right) \cdot x1\right)}{\mathsf{fma}\left(x1, x1, 1\right)}\right) + \mathsf{fma}\left(\mathsf{fma}\left(\left(\frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1} - 3\right) \cdot 2, \frac{x1 \cdot \mathsf{fma}\left(3, x1 \cdot x1, 2 \cdot x2 - x1\right)}{\mathsf{fma}\left(x1, x1, 1\right)}, x1 \cdot \mathsf{fma}\left(x1, \frac{\mathsf{fma}\left(3, x1 \cdot x1, 2 \cdot x2 - x1\right) \cdot 4}{\mathsf{fma}\left(x1, x1, 1\right)}, x1 \cdot \left(-6\right)\right)\right), \mathsf{fma}\left(x1, x1, 1\right), \mathsf{fma}\left(x1, x1 \cdot x1, x1\right)\right)\right)double f(double x1, double x2) {
double r40602 = x1;
double r40603 = 2.0;
double r40604 = r40603 * r40602;
double r40605 = 3.0;
double r40606 = r40605 * r40602;
double r40607 = r40606 * r40602;
double r40608 = x2;
double r40609 = r40603 * r40608;
double r40610 = r40607 + r40609;
double r40611 = r40610 - r40602;
double r40612 = r40602 * r40602;
double r40613 = 1.0;
double r40614 = r40612 + r40613;
double r40615 = r40611 / r40614;
double r40616 = r40604 * r40615;
double r40617 = r40615 - r40605;
double r40618 = r40616 * r40617;
double r40619 = 4.0;
double r40620 = r40619 * r40615;
double r40621 = 6.0;
double r40622 = r40620 - r40621;
double r40623 = r40612 * r40622;
double r40624 = r40618 + r40623;
double r40625 = r40624 * r40614;
double r40626 = r40607 * r40615;
double r40627 = r40625 + r40626;
double r40628 = r40612 * r40602;
double r40629 = r40627 + r40628;
double r40630 = r40629 + r40602;
double r40631 = r40607 - r40609;
double r40632 = r40631 - r40602;
double r40633 = r40632 / r40614;
double r40634 = r40605 * r40633;
double r40635 = r40630 + r40634;
double r40636 = r40602 + r40635;
return r40636;
}
double f(double x1, double x2) {
double r40637 = 3.0;
double r40638 = x1;
double r40639 = 1.0;
double r40640 = fma(r40638, r40638, r40639);
double r40641 = r40637 / r40640;
double r40642 = r40638 * r40638;
double r40643 = x2;
double r40644 = 2.0;
double r40645 = fma(r40643, r40644, r40638);
double r40646 = -r40645;
double r40647 = fma(r40637, r40642, r40646);
double r40648 = r40644 * r40643;
double r40649 = r40648 - r40638;
double r40650 = fma(r40637, r40642, r40649);
double r40651 = r40637 * r40638;
double r40652 = r40651 * r40638;
double r40653 = r40650 * r40652;
double r40654 = r40653 / r40640;
double r40655 = r40638 + r40654;
double r40656 = r40652 + r40648;
double r40657 = r40656 - r40638;
double r40658 = r40642 + r40639;
double r40659 = r40657 / r40658;
double r40660 = r40659 - r40637;
double r40661 = r40660 * r40644;
double r40662 = r40638 * r40650;
double r40663 = r40662 / r40640;
double r40664 = 4.0;
double r40665 = r40650 * r40664;
double r40666 = r40665 / r40640;
double r40667 = 6.0;
double r40668 = -r40667;
double r40669 = r40638 * r40668;
double r40670 = fma(r40638, r40666, r40669);
double r40671 = r40638 * r40670;
double r40672 = fma(r40661, r40663, r40671);
double r40673 = fma(r40638, r40642, r40638);
double r40674 = fma(r40672, r40640, r40673);
double r40675 = r40655 + r40674;
double r40676 = fma(r40641, r40647, r40675);
return r40676;
}



Bits error versus x1



Bits error versus x2
Initial program 0.5
Simplified0.3
rmApplied associate-*l*0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020020 +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))))))