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{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{\left(x1 \cdot x1\right) \cdot \left(x1 \cdot x1\right) - 1 \cdot 1}, 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 r40018 = x1;
double r40019 = 2.0;
double r40020 = r40019 * r40018;
double r40021 = 3.0;
double r40022 = r40021 * r40018;
double r40023 = r40022 * r40018;
double r40024 = x2;
double r40025 = r40019 * r40024;
double r40026 = r40023 + r40025;
double r40027 = r40026 - r40018;
double r40028 = r40018 * r40018;
double r40029 = 1.0;
double r40030 = r40028 + r40029;
double r40031 = r40027 / r40030;
double r40032 = r40020 * r40031;
double r40033 = r40031 - r40021;
double r40034 = r40032 * r40033;
double r40035 = 4.0;
double r40036 = r40035 * r40031;
double r40037 = 6.0;
double r40038 = r40036 - r40037;
double r40039 = r40028 * r40038;
double r40040 = r40034 + r40039;
double r40041 = r40040 * r40030;
double r40042 = r40023 * r40031;
double r40043 = r40041 + r40042;
double r40044 = r40028 * r40018;
double r40045 = r40043 + r40044;
double r40046 = r40045 + r40018;
double r40047 = r40023 - r40025;
double r40048 = r40047 - r40018;
double r40049 = r40048 / r40030;
double r40050 = r40021 * r40049;
double r40051 = r40046 + r40050;
double r40052 = r40018 + r40051;
return r40052;
}
double f(double x1, double x2) {
double r40053 = 3.0;
double r40054 = x1;
double r40055 = 1.0;
double r40056 = fma(r40054, r40054, r40055);
double r40057 = r40053 / r40056;
double r40058 = r40054 * r40054;
double r40059 = x2;
double r40060 = 2.0;
double r40061 = fma(r40059, r40060, r40054);
double r40062 = -r40061;
double r40063 = fma(r40053, r40058, r40062);
double r40064 = r40060 * r40059;
double r40065 = r40064 - r40054;
double r40066 = fma(r40053, r40058, r40065);
double r40067 = r40053 * r40054;
double r40068 = r40067 * r40054;
double r40069 = r40066 * r40068;
double r40070 = r40069 / r40056;
double r40071 = r40054 + r40070;
double r40072 = r40068 + r40064;
double r40073 = r40072 - r40054;
double r40074 = r40058 * r40058;
double r40075 = r40055 * r40055;
double r40076 = r40074 - r40075;
double r40077 = r40073 / r40076;
double r40078 = r40058 - r40055;
double r40079 = -r40053;
double r40080 = fma(r40077, r40078, r40079);
double r40081 = r40080 * r40060;
double r40082 = r40054 * r40066;
double r40083 = r40082 / r40056;
double r40084 = 4.0;
double r40085 = r40066 * r40084;
double r40086 = r40085 / r40056;
double r40087 = 6.0;
double r40088 = -r40087;
double r40089 = r40054 * r40088;
double r40090 = fma(r40054, r40086, r40089);
double r40091 = r40054 * r40090;
double r40092 = fma(r40081, r40083, r40091);
double r40093 = fma(r40054, r40058, r40054);
double r40094 = fma(r40092, r40056, r40093);
double r40095 = r40071 + r40094;
double r40096 = fma(r40057, r40063, r40095);
return r40096;
}



Bits error versus x1



Bits error versus x2
Initial program 0.5
Simplified0.3
rmApplied associate-*l*0.3
Simplified0.3
rmApplied flip-+0.3
Applied associate-/r/0.3
Applied fma-neg0.3
Final simplification0.3
herbie shell --seed 2020001 +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))))))