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 + \left(\left(\left(\left(\left(\mathsf{fma}\left(\frac{4 \cdot \left(\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1\right)}{\mathsf{fma}\left(x1, x1, 1\right)}, {x1}^{2}, \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 \frac{\left(2 \cdot x1\right) \cdot \left(\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1\right)}{\mathsf{fma}\left(x1, x1, 1\right)}\right) + \left(-6\right) \cdot \left(x1 \cdot x1\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)double f(double x1, double x2) {
double r53385 = x1;
double r53386 = 2.0;
double r53387 = r53386 * r53385;
double r53388 = 3.0;
double r53389 = r53388 * r53385;
double r53390 = r53389 * r53385;
double r53391 = x2;
double r53392 = r53386 * r53391;
double r53393 = r53390 + r53392;
double r53394 = r53393 - r53385;
double r53395 = r53385 * r53385;
double r53396 = 1.0;
double r53397 = r53395 + r53396;
double r53398 = r53394 / r53397;
double r53399 = r53387 * r53398;
double r53400 = r53398 - r53388;
double r53401 = r53399 * r53400;
double r53402 = 4.0;
double r53403 = r53402 * r53398;
double r53404 = 6.0;
double r53405 = r53403 - r53404;
double r53406 = r53395 * r53405;
double r53407 = r53401 + r53406;
double r53408 = r53407 * r53397;
double r53409 = r53390 * r53398;
double r53410 = r53408 + r53409;
double r53411 = r53395 * r53385;
double r53412 = r53410 + r53411;
double r53413 = r53412 + r53385;
double r53414 = r53390 - r53392;
double r53415 = r53414 - r53385;
double r53416 = r53415 / r53397;
double r53417 = r53388 * r53416;
double r53418 = r53413 + r53417;
double r53419 = r53385 + r53418;
return r53419;
}
double f(double x1, double x2) {
double r53420 = x1;
double r53421 = 4.0;
double r53422 = 3.0;
double r53423 = r53422 * r53420;
double r53424 = r53423 * r53420;
double r53425 = 2.0;
double r53426 = x2;
double r53427 = r53425 * r53426;
double r53428 = r53424 + r53427;
double r53429 = r53428 - r53420;
double r53430 = r53421 * r53429;
double r53431 = 1.0;
double r53432 = fma(r53420, r53420, r53431);
double r53433 = r53430 / r53432;
double r53434 = 2.0;
double r53435 = pow(r53420, r53434);
double r53436 = r53420 * r53420;
double r53437 = r53436 * r53436;
double r53438 = r53431 * r53431;
double r53439 = r53437 - r53438;
double r53440 = r53429 / r53439;
double r53441 = r53436 - r53431;
double r53442 = -r53422;
double r53443 = fma(r53440, r53441, r53442);
double r53444 = r53425 * r53420;
double r53445 = r53444 * r53429;
double r53446 = r53445 / r53432;
double r53447 = r53443 * r53446;
double r53448 = fma(r53433, r53435, r53447);
double r53449 = 6.0;
double r53450 = -r53449;
double r53451 = r53450 * r53436;
double r53452 = r53448 + r53451;
double r53453 = r53436 + r53431;
double r53454 = r53452 * r53453;
double r53455 = r53429 / r53453;
double r53456 = r53424 * r53455;
double r53457 = r53454 + r53456;
double r53458 = r53436 * r53420;
double r53459 = r53457 + r53458;
double r53460 = r53459 + r53420;
double r53461 = r53424 - r53427;
double r53462 = r53461 - r53420;
double r53463 = r53462 / r53453;
double r53464 = r53422 * r53463;
double r53465 = r53460 + r53464;
double r53466 = r53420 + r53465;
return r53466;
}



Bits error versus x1



Bits error versus x2
Initial program 0.5
rmApplied sub-neg0.5
Applied distribute-rgt-in0.5
Applied associate-+r+0.5
Simplified0.5
rmApplied flip-+0.5
Applied associate-/r/0.5
Applied fma-neg0.5
Final simplification0.5
herbie shell --seed 2020089 +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))))))