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(\sqrt[3]{\frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1}} \cdot \sqrt[3]{\frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1}}, \sqrt[3]{\frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{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(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), \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 r56212 = x1;
double r56213 = 2.0;
double r56214 = r56213 * r56212;
double r56215 = 3.0;
double r56216 = r56215 * r56212;
double r56217 = r56216 * r56212;
double r56218 = x2;
double r56219 = r56213 * r56218;
double r56220 = r56217 + r56219;
double r56221 = r56220 - r56212;
double r56222 = r56212 * r56212;
double r56223 = 1.0;
double r56224 = r56222 + r56223;
double r56225 = r56221 / r56224;
double r56226 = r56214 * r56225;
double r56227 = r56225 - r56215;
double r56228 = r56226 * r56227;
double r56229 = 4.0;
double r56230 = r56229 * r56225;
double r56231 = 6.0;
double r56232 = r56230 - r56231;
double r56233 = r56222 * r56232;
double r56234 = r56228 + r56233;
double r56235 = r56234 * r56224;
double r56236 = r56217 * r56225;
double r56237 = r56235 + r56236;
double r56238 = r56222 * r56212;
double r56239 = r56237 + r56238;
double r56240 = r56239 + r56212;
double r56241 = r56217 - r56219;
double r56242 = r56241 - r56212;
double r56243 = r56242 / r56224;
double r56244 = r56215 * r56243;
double r56245 = r56240 + r56244;
double r56246 = r56212 + r56245;
return r56246;
}
double f(double x1, double x2) {
double r56247 = 3.0;
double r56248 = x1;
double r56249 = 1.0;
double r56250 = fma(r56248, r56248, r56249);
double r56251 = r56247 / r56250;
double r56252 = r56248 * r56248;
double r56253 = x2;
double r56254 = 2.0;
double r56255 = fma(r56253, r56254, r56248);
double r56256 = -r56255;
double r56257 = fma(r56247, r56252, r56256);
double r56258 = r56254 * r56253;
double r56259 = r56258 - r56248;
double r56260 = fma(r56247, r56252, r56259);
double r56261 = r56247 * r56248;
double r56262 = r56261 * r56248;
double r56263 = r56260 * r56262;
double r56264 = r56263 / r56250;
double r56265 = r56248 + r56264;
double r56266 = r56262 + r56258;
double r56267 = r56266 - r56248;
double r56268 = r56252 + r56249;
double r56269 = r56267 / r56268;
double r56270 = cbrt(r56269);
double r56271 = r56270 * r56270;
double r56272 = -r56247;
double r56273 = fma(r56271, r56270, r56272);
double r56274 = r56273 * r56254;
double r56275 = r56248 * r56260;
double r56276 = r56275 / r56250;
double r56277 = 4.0;
double r56278 = r56277 * r56269;
double r56279 = 6.0;
double r56280 = r56278 - r56279;
double r56281 = r56252 * r56280;
double r56282 = fma(r56274, r56276, r56281);
double r56283 = fma(r56248, r56252, r56248);
double r56284 = fma(r56282, r56250, r56283);
double r56285 = r56265 + r56284;
double r56286 = fma(r56251, r56257, r56285);
return r56286;
}



Bits error versus x1



Bits error versus x2
Initial program 0.5
Simplified0.3
rmApplied add-cube-cbrt0.4
Applied fma-neg0.4
Final simplification0.4
herbie shell --seed 2020083 +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))))))