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)}, \left(\sqrt[3]{x1} \cdot \sqrt[3]{x1}\right) \cdot \left(\sqrt[3]{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)\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 r41672 = x1;
double r41673 = 2.0;
double r41674 = r41673 * r41672;
double r41675 = 3.0;
double r41676 = r41675 * r41672;
double r41677 = r41676 * r41672;
double r41678 = x2;
double r41679 = r41673 * r41678;
double r41680 = r41677 + r41679;
double r41681 = r41680 - r41672;
double r41682 = r41672 * r41672;
double r41683 = 1.0;
double r41684 = r41682 + r41683;
double r41685 = r41681 / r41684;
double r41686 = r41674 * r41685;
double r41687 = r41685 - r41675;
double r41688 = r41686 * r41687;
double r41689 = 4.0;
double r41690 = r41689 * r41685;
double r41691 = 6.0;
double r41692 = r41690 - r41691;
double r41693 = r41682 * r41692;
double r41694 = r41688 + r41693;
double r41695 = r41694 * r41684;
double r41696 = r41677 * r41685;
double r41697 = r41695 + r41696;
double r41698 = r41682 * r41672;
double r41699 = r41697 + r41698;
double r41700 = r41699 + r41672;
double r41701 = r41677 - r41679;
double r41702 = r41701 - r41672;
double r41703 = r41702 / r41684;
double r41704 = r41675 * r41703;
double r41705 = r41700 + r41704;
double r41706 = r41672 + r41705;
return r41706;
}
double f(double x1, double x2) {
double r41707 = 3.0;
double r41708 = x1;
double r41709 = 1.0;
double r41710 = fma(r41708, r41708, r41709);
double r41711 = r41707 / r41710;
double r41712 = r41708 * r41708;
double r41713 = x2;
double r41714 = 2.0;
double r41715 = fma(r41713, r41714, r41708);
double r41716 = -r41715;
double r41717 = fma(r41707, r41712, r41716);
double r41718 = r41714 * r41713;
double r41719 = r41718 - r41708;
double r41720 = fma(r41707, r41712, r41719);
double r41721 = r41707 * r41708;
double r41722 = r41721 * r41708;
double r41723 = r41720 * r41722;
double r41724 = r41723 / r41710;
double r41725 = r41708 + r41724;
double r41726 = 1.0;
double r41727 = r41712 + r41709;
double r41728 = sqrt(r41727);
double r41729 = r41726 / r41728;
double r41730 = r41722 + r41718;
double r41731 = r41730 - r41708;
double r41732 = r41731 / r41728;
double r41733 = -r41707;
double r41734 = fma(r41729, r41732, r41733);
double r41735 = r41734 * r41714;
double r41736 = r41708 * r41720;
double r41737 = r41736 / r41710;
double r41738 = cbrt(r41708);
double r41739 = r41738 * r41738;
double r41740 = 4.0;
double r41741 = r41720 * r41740;
double r41742 = r41741 / r41710;
double r41743 = 6.0;
double r41744 = -r41743;
double r41745 = r41708 * r41744;
double r41746 = fma(r41708, r41742, r41745);
double r41747 = r41738 * r41746;
double r41748 = r41739 * r41747;
double r41749 = fma(r41735, r41737, r41748);
double r41750 = fma(r41708, r41712, r41708);
double r41751 = fma(r41749, r41710, r41750);
double r41752 = r41725 + r41751;
double r41753 = fma(r41711, r41717, r41752);
return r41753;
}



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 add-cube-cbrt0.4
Applied associate-*l*0.4
Final simplification0.4
herbie shell --seed 2020062 +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))))))