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(\frac{1}{\sqrt{\sqrt{x1 \cdot x1 + 1}}} \cdot \frac{\left(\left(3 \cdot x1\right) \cdot x1 + \left(\left(\frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1} - 3\right) \cdot \left(2 \cdot x1\right)\right) \cdot \left(x1 \cdot x1 + 1\right)\right) \cdot \frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{\sqrt{x1 \cdot x1 + 1}}}{\sqrt{\sqrt{x1 \cdot x1 + 1}}} + \left(x1 \cdot x1 + 1\right) \cdot \left(\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)\right) + \left({x1}^{3} + \left(\left(x1 + 3 \cdot \frac{\left(\left(3 \cdot x1\right) \cdot x1 - 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1}\right) + x1\right)\right)double f(double x1, double x2) {
double r83777 = x1;
double r83778 = 2.0;
double r83779 = r83778 * r83777;
double r83780 = 3.0;
double r83781 = r83780 * r83777;
double r83782 = r83781 * r83777;
double r83783 = x2;
double r83784 = r83778 * r83783;
double r83785 = r83782 + r83784;
double r83786 = r83785 - r83777;
double r83787 = r83777 * r83777;
double r83788 = 1.0;
double r83789 = r83787 + r83788;
double r83790 = r83786 / r83789;
double r83791 = r83779 * r83790;
double r83792 = r83790 - r83780;
double r83793 = r83791 * r83792;
double r83794 = 4.0;
double r83795 = r83794 * r83790;
double r83796 = 6.0;
double r83797 = r83795 - r83796;
double r83798 = r83787 * r83797;
double r83799 = r83793 + r83798;
double r83800 = r83799 * r83789;
double r83801 = r83782 * r83790;
double r83802 = r83800 + r83801;
double r83803 = r83787 * r83777;
double r83804 = r83802 + r83803;
double r83805 = r83804 + r83777;
double r83806 = r83782 - r83784;
double r83807 = r83806 - r83777;
double r83808 = r83807 / r83789;
double r83809 = r83780 * r83808;
double r83810 = r83805 + r83809;
double r83811 = r83777 + r83810;
return r83811;
}
double f(double x1, double x2) {
double r83812 = 1.0;
double r83813 = x1;
double r83814 = r83813 * r83813;
double r83815 = 1.0;
double r83816 = r83814 + r83815;
double r83817 = sqrt(r83816);
double r83818 = sqrt(r83817);
double r83819 = r83812 / r83818;
double r83820 = 3.0;
double r83821 = r83820 * r83813;
double r83822 = r83821 * r83813;
double r83823 = 2.0;
double r83824 = x2;
double r83825 = r83823 * r83824;
double r83826 = r83822 + r83825;
double r83827 = r83826 - r83813;
double r83828 = r83827 / r83816;
double r83829 = r83828 - r83820;
double r83830 = r83823 * r83813;
double r83831 = r83829 * r83830;
double r83832 = r83831 * r83816;
double r83833 = r83822 + r83832;
double r83834 = r83827 / r83817;
double r83835 = r83833 * r83834;
double r83836 = r83835 / r83818;
double r83837 = r83819 * r83836;
double r83838 = 4.0;
double r83839 = r83838 * r83828;
double r83840 = 6.0;
double r83841 = r83839 - r83840;
double r83842 = r83814 * r83841;
double r83843 = r83816 * r83842;
double r83844 = r83837 + r83843;
double r83845 = 3.0;
double r83846 = pow(r83813, r83845);
double r83847 = r83822 - r83825;
double r83848 = r83847 - r83813;
double r83849 = r83848 / r83816;
double r83850 = r83820 * r83849;
double r83851 = r83813 + r83850;
double r83852 = r83851 + r83813;
double r83853 = r83846 + r83852;
double r83854 = r83844 + r83853;
return r83854;
}



Bits error versus x1



Bits error versus x2
Results
Initial program 0.5
Simplified0.5
rmApplied add-sqr-sqrt0.5
Applied *-un-lft-identity0.5
Applied times-frac0.5
Applied associate-*l*0.9
rmApplied add-sqr-sqrt0.9
Applied sqrt-prod0.9
Applied *-un-lft-identity0.9
Applied times-frac0.9
Applied associate-*l*0.9
Simplified0.9
Final simplification0.9
herbie shell --seed 2019303
(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))))))