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(\left(\left(\left(\left(\left(x1 \cdot x1\right) \cdot -6 + \left(x1 \cdot x1\right) \cdot \left(\frac{\left(\left(3 \cdot x1\right) \cdot x1 + x2 \cdot 2\right) - x1}{1 + x1 \cdot x1} \cdot 4\right)\right) + \left(\left(x1 \cdot 2\right) \cdot \frac{\left(\left(3 \cdot x1\right) \cdot x1 + x2 \cdot 2\right) - x1}{1 + x1 \cdot x1}\right) \cdot \left(\sqrt[3]{\frac{\left(\left(3 \cdot x1\right) \cdot x1 + x2 \cdot 2\right) - x1}{1 + x1 \cdot x1} - 3} \cdot \left(\sqrt[3]{\frac{\left(\left(3 \cdot x1\right) \cdot x1 + x2 \cdot 2\right) - x1}{1 + x1 \cdot x1} - 3} \cdot \sqrt[3]{\frac{\left(\left(3 \cdot x1\right) \cdot x1 + x2 \cdot 2\right) - x1}{1 + x1 \cdot x1} - 3}\right)\right)\right) \cdot \left(1 + x1 \cdot x1\right) + \left(\left(3 \cdot x1\right) \cdot x1\right) \cdot \frac{\left(\left(3 \cdot x1\right) \cdot x1 + x2 \cdot 2\right) - x1}{1 + x1 \cdot x1}\right) + x1 \cdot \left(x1 \cdot x1\right)\right) + x1\right) + 3 \cdot \frac{\left(\left(3 \cdot x1\right) \cdot x1 - x2 \cdot 2\right) - x1}{1 + x1 \cdot x1}\right) + x1double f(double x1, double x2) {
double r40220659 = x1;
double r40220660 = 2.0;
double r40220661 = r40220660 * r40220659;
double r40220662 = 3.0;
double r40220663 = r40220662 * r40220659;
double r40220664 = r40220663 * r40220659;
double r40220665 = x2;
double r40220666 = r40220660 * r40220665;
double r40220667 = r40220664 + r40220666;
double r40220668 = r40220667 - r40220659;
double r40220669 = r40220659 * r40220659;
double r40220670 = 1.0;
double r40220671 = r40220669 + r40220670;
double r40220672 = r40220668 / r40220671;
double r40220673 = r40220661 * r40220672;
double r40220674 = r40220672 - r40220662;
double r40220675 = r40220673 * r40220674;
double r40220676 = 4.0;
double r40220677 = r40220676 * r40220672;
double r40220678 = 6.0;
double r40220679 = r40220677 - r40220678;
double r40220680 = r40220669 * r40220679;
double r40220681 = r40220675 + r40220680;
double r40220682 = r40220681 * r40220671;
double r40220683 = r40220664 * r40220672;
double r40220684 = r40220682 + r40220683;
double r40220685 = r40220669 * r40220659;
double r40220686 = r40220684 + r40220685;
double r40220687 = r40220686 + r40220659;
double r40220688 = r40220664 - r40220666;
double r40220689 = r40220688 - r40220659;
double r40220690 = r40220689 / r40220671;
double r40220691 = r40220662 * r40220690;
double r40220692 = r40220687 + r40220691;
double r40220693 = r40220659 + r40220692;
return r40220693;
}
double f(double x1, double x2) {
double r40220694 = x1;
double r40220695 = r40220694 * r40220694;
double r40220696 = -6.0;
double r40220697 = r40220695 * r40220696;
double r40220698 = 3.0;
double r40220699 = r40220698 * r40220694;
double r40220700 = r40220699 * r40220694;
double r40220701 = x2;
double r40220702 = 2.0;
double r40220703 = r40220701 * r40220702;
double r40220704 = r40220700 + r40220703;
double r40220705 = r40220704 - r40220694;
double r40220706 = 1.0;
double r40220707 = r40220706 + r40220695;
double r40220708 = r40220705 / r40220707;
double r40220709 = 4.0;
double r40220710 = r40220708 * r40220709;
double r40220711 = r40220695 * r40220710;
double r40220712 = r40220697 + r40220711;
double r40220713 = r40220694 * r40220702;
double r40220714 = r40220713 * r40220708;
double r40220715 = r40220708 - r40220698;
double r40220716 = cbrt(r40220715);
double r40220717 = r40220716 * r40220716;
double r40220718 = r40220716 * r40220717;
double r40220719 = r40220714 * r40220718;
double r40220720 = r40220712 + r40220719;
double r40220721 = r40220720 * r40220707;
double r40220722 = r40220700 * r40220708;
double r40220723 = r40220721 + r40220722;
double r40220724 = r40220694 * r40220695;
double r40220725 = r40220723 + r40220724;
double r40220726 = r40220725 + r40220694;
double r40220727 = r40220700 - r40220703;
double r40220728 = r40220727 - r40220694;
double r40220729 = r40220728 / r40220707;
double r40220730 = r40220698 * r40220729;
double r40220731 = r40220726 + r40220730;
double r40220732 = r40220731 + r40220694;
return r40220732;
}



Bits error versus x1



Bits error versus x2
Results
Initial program 0.5
rmApplied sub-neg0.5
Applied distribute-rgt-in0.5
Simplified0.5
rmApplied add-cube-cbrt0.6
Final simplification0.6
herbie shell --seed 2019125
(FPCore (x1 x2)
:name "Rosa's FloatVsDoubleBenchmark"
(+ 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))))))