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(\mathsf{fma}\left(\frac{1}{\sqrt{x1 \cdot x1 + 1}}, \frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{\sqrt{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 \left(x1 \cdot \frac{\mathsf{fma}\left(3, x1 \cdot x1, 2 \cdot x2 - x1\right) \cdot 4}{\mathsf{fma}\left(x1, x1, 1\right)}\right) + x1 \cdot \left(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 r39702 = x1;
double r39703 = 2.0;
double r39704 = r39703 * r39702;
double r39705 = 3.0;
double r39706 = r39705 * r39702;
double r39707 = r39706 * r39702;
double r39708 = x2;
double r39709 = r39703 * r39708;
double r39710 = r39707 + r39709;
double r39711 = r39710 - r39702;
double r39712 = r39702 * r39702;
double r39713 = 1.0;
double r39714 = r39712 + r39713;
double r39715 = r39711 / r39714;
double r39716 = r39704 * r39715;
double r39717 = r39715 - r39705;
double r39718 = r39716 * r39717;
double r39719 = 4.0;
double r39720 = r39719 * r39715;
double r39721 = 6.0;
double r39722 = r39720 - r39721;
double r39723 = r39712 * r39722;
double r39724 = r39718 + r39723;
double r39725 = r39724 * r39714;
double r39726 = r39707 * r39715;
double r39727 = r39725 + r39726;
double r39728 = r39712 * r39702;
double r39729 = r39727 + r39728;
double r39730 = r39729 + r39702;
double r39731 = r39707 - r39709;
double r39732 = r39731 - r39702;
double r39733 = r39732 / r39714;
double r39734 = r39705 * r39733;
double r39735 = r39730 + r39734;
double r39736 = r39702 + r39735;
return r39736;
}
double f(double x1, double x2) {
double r39737 = 3.0;
double r39738 = x1;
double r39739 = 1.0;
double r39740 = fma(r39738, r39738, r39739);
double r39741 = r39737 / r39740;
double r39742 = r39738 * r39738;
double r39743 = x2;
double r39744 = 2.0;
double r39745 = fma(r39743, r39744, r39738);
double r39746 = -r39745;
double r39747 = fma(r39737, r39742, r39746);
double r39748 = r39744 * r39743;
double r39749 = r39748 - r39738;
double r39750 = fma(r39737, r39742, r39749);
double r39751 = r39737 * r39738;
double r39752 = r39751 * r39738;
double r39753 = r39750 * r39752;
double r39754 = r39753 / r39740;
double r39755 = r39738 + r39754;
double r39756 = 1.0;
double r39757 = r39742 + r39739;
double r39758 = sqrt(r39757);
double r39759 = r39756 / r39758;
double r39760 = r39752 + r39748;
double r39761 = r39760 - r39738;
double r39762 = r39761 / r39758;
double r39763 = -r39737;
double r39764 = fma(r39759, r39762, r39763);
double r39765 = r39764 * r39744;
double r39766 = r39738 * r39750;
double r39767 = r39766 / r39740;
double r39768 = 4.0;
double r39769 = r39750 * r39768;
double r39770 = r39769 / r39740;
double r39771 = r39738 * r39770;
double r39772 = r39738 * r39771;
double r39773 = 6.0;
double r39774 = -r39773;
double r39775 = r39738 * r39774;
double r39776 = r39738 * r39775;
double r39777 = r39772 + r39776;
double r39778 = fma(r39765, r39767, r39777);
double r39779 = fma(r39738, r39742, r39738);
double r39780 = fma(r39778, r39740, r39779);
double r39781 = r39755 + r39780;
double r39782 = fma(r39741, r39747, r39781);
return r39782;
}



Bits error versus x1



Bits error versus x2
Initial program 0.5
Simplified0.3
rmApplied associate-*l*0.3
Simplified0.3
rmApplied add-sqr-sqrt0.3
Applied *-un-lft-identity0.3
Applied times-frac0.3
Applied fma-neg0.3
rmApplied fma-udef0.3
Applied distribute-lft-in0.3
Final simplification0.3
herbie shell --seed 2020018 +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))))))