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)x1 + \mathsf{fma}\left(3, \left(\frac{x1 \cdot \left(x1 \cdot 3\right) - \mathsf{fma}\left(2, x2, x1\right)}{\mathsf{fma}\left(x1, x1, 1\right)}\right), \left(\mathsf{fma}\left(x1, \left(x1 \cdot x1\right), \left(\mathsf{fma}\left(\left(\frac{\mathsf{fma}\left(x2, 2, \left(x1 \cdot \left(x1 \cdot 3\right)\right)\right) - x1}{\mathsf{fma}\left(x1, x1, 1\right)}\right), \left(x1 \cdot \left(x1 \cdot 3\right)\right), \left(\mathsf{fma}\left(\left(\mathsf{fma}\left(\left(\frac{\mathsf{fma}\left(x2, 2, \left(x1 \cdot \left(x1 \cdot 3\right)\right)\right) - x1}{\mathsf{fma}\left(x1, x1, 1\right)}\right), 4, -6\right)\right), \left(x1 \cdot x1\right), \left(\mathsf{fma}\left(\left(\frac{\sqrt[3]{\mathsf{fma}\left(x2, 2, \left(x1 \cdot \left(x1 \cdot 3\right)\right)\right) - x1} \cdot \sqrt[3]{\mathsf{fma}\left(x2, 2, \left(x1 \cdot \left(x1 \cdot 3\right)\right)\right) - x1}}{\sqrt{\mathsf{fma}\left(x1, x1, 1\right)}}\right), \left(\frac{\sqrt[3]{\mathsf{fma}\left(x2, 2, \left(x1 \cdot \left(x1 \cdot 3\right)\right)\right) - x1}}{\sqrt{\mathsf{fma}\left(x1, x1, 1\right)}}\right), -3\right) \cdot \left(\frac{\mathsf{fma}\left(x2, 2, \left(x1 \cdot \left(x1 \cdot 3\right)\right)\right) - x1}{\mathsf{fma}\left(x1, x1, 1\right)} \cdot \left(2 \cdot x1\right)\right)\right)\right) \cdot \mathsf{fma}\left(x1, x1, 1\right)\right)\right)\right)\right) + x1\right)\right)double f(double x1, double x2) {
double r12679315 = x1;
double r12679316 = 2.0;
double r12679317 = r12679316 * r12679315;
double r12679318 = 3.0;
double r12679319 = r12679318 * r12679315;
double r12679320 = r12679319 * r12679315;
double r12679321 = x2;
double r12679322 = r12679316 * r12679321;
double r12679323 = r12679320 + r12679322;
double r12679324 = r12679323 - r12679315;
double r12679325 = r12679315 * r12679315;
double r12679326 = 1.0;
double r12679327 = r12679325 + r12679326;
double r12679328 = r12679324 / r12679327;
double r12679329 = r12679317 * r12679328;
double r12679330 = r12679328 - r12679318;
double r12679331 = r12679329 * r12679330;
double r12679332 = 4.0;
double r12679333 = r12679332 * r12679328;
double r12679334 = 6.0;
double r12679335 = r12679333 - r12679334;
double r12679336 = r12679325 * r12679335;
double r12679337 = r12679331 + r12679336;
double r12679338 = r12679337 * r12679327;
double r12679339 = r12679320 * r12679328;
double r12679340 = r12679338 + r12679339;
double r12679341 = r12679325 * r12679315;
double r12679342 = r12679340 + r12679341;
double r12679343 = r12679342 + r12679315;
double r12679344 = r12679320 - r12679322;
double r12679345 = r12679344 - r12679315;
double r12679346 = r12679345 / r12679327;
double r12679347 = r12679318 * r12679346;
double r12679348 = r12679343 + r12679347;
double r12679349 = r12679315 + r12679348;
return r12679349;
}
double f(double x1, double x2) {
double r12679350 = x1;
double r12679351 = 3.0;
double r12679352 = r12679350 * r12679351;
double r12679353 = r12679350 * r12679352;
double r12679354 = 2.0;
double r12679355 = x2;
double r12679356 = fma(r12679354, r12679355, r12679350);
double r12679357 = r12679353 - r12679356;
double r12679358 = 1.0;
double r12679359 = fma(r12679350, r12679350, r12679358);
double r12679360 = r12679357 / r12679359;
double r12679361 = r12679350 * r12679350;
double r12679362 = fma(r12679355, r12679354, r12679353);
double r12679363 = r12679362 - r12679350;
double r12679364 = r12679363 / r12679359;
double r12679365 = 4.0;
double r12679366 = -6.0;
double r12679367 = fma(r12679364, r12679365, r12679366);
double r12679368 = cbrt(r12679363);
double r12679369 = r12679368 * r12679368;
double r12679370 = sqrt(r12679359);
double r12679371 = r12679369 / r12679370;
double r12679372 = r12679368 / r12679370;
double r12679373 = -3.0;
double r12679374 = fma(r12679371, r12679372, r12679373);
double r12679375 = r12679354 * r12679350;
double r12679376 = r12679364 * r12679375;
double r12679377 = r12679374 * r12679376;
double r12679378 = fma(r12679367, r12679361, r12679377);
double r12679379 = r12679378 * r12679359;
double r12679380 = fma(r12679364, r12679353, r12679379);
double r12679381 = fma(r12679350, r12679361, r12679380);
double r12679382 = r12679381 + r12679350;
double r12679383 = fma(r12679351, r12679360, r12679382);
double r12679384 = r12679350 + r12679383;
return r12679384;
}



Bits error versus x1



Bits error versus x2
Initial program 0.5
Simplified0.3
rmApplied add-sqr-sqrt0.3
Applied add-cube-cbrt0.4
Applied times-frac0.4
Applied fma-neg0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2019125 +o rules:numerics
(FPCore (x1 x2)
:name "Rosa's FloatVsDoubleBenchmark"
(+ 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))))))