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(\left(\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}}\right) \cdot \left(\sqrt[3]{\frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1}} \cdot \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)\right) + \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}\right)\right)\right) + \left(\left(-6\right) \cdot \left(x1 \cdot x1\right)\right) \cdot \left(x1 \cdot x1 + 1\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 r55482 = x1;
double r55483 = 2.0;
double r55484 = r55483 * r55482;
double r55485 = 3.0;
double r55486 = r55485 * r55482;
double r55487 = r55486 * r55482;
double r55488 = x2;
double r55489 = r55483 * r55488;
double r55490 = r55487 + r55489;
double r55491 = r55490 - r55482;
double r55492 = r55482 * r55482;
double r55493 = 1.0;
double r55494 = r55492 + r55493;
double r55495 = r55491 / r55494;
double r55496 = r55484 * r55495;
double r55497 = r55495 - r55485;
double r55498 = r55496 * r55497;
double r55499 = 4.0;
double r55500 = r55499 * r55495;
double r55501 = 6.0;
double r55502 = r55500 - r55501;
double r55503 = r55492 * r55502;
double r55504 = r55498 + r55503;
double r55505 = r55504 * r55494;
double r55506 = r55487 * r55495;
double r55507 = r55505 + r55506;
double r55508 = r55492 * r55482;
double r55509 = r55507 + r55508;
double r55510 = r55509 + r55482;
double r55511 = r55487 - r55489;
double r55512 = r55511 - r55482;
double r55513 = r55512 / r55494;
double r55514 = r55485 * r55513;
double r55515 = r55510 + r55514;
double r55516 = r55482 + r55515;
return r55516;
}
double f(double x1, double x2) {
double r55517 = 3.0;
double r55518 = x1;
double r55519 = r55517 * r55518;
double r55520 = r55519 * r55518;
double r55521 = 2.0;
double r55522 = x2;
double r55523 = r55521 * r55522;
double r55524 = r55520 + r55523;
double r55525 = r55524 - r55518;
double r55526 = r55518 * r55518;
double r55527 = 1.0;
double r55528 = r55526 + r55527;
double r55529 = r55525 / r55528;
double r55530 = cbrt(r55529);
double r55531 = r55530 * r55530;
double r55532 = r55529 - r55517;
double r55533 = r55521 * r55518;
double r55534 = r55532 * r55533;
double r55535 = r55534 * r55528;
double r55536 = r55520 + r55535;
double r55537 = r55530 * r55536;
double r55538 = r55531 * r55537;
double r55539 = 4.0;
double r55540 = r55539 * r55529;
double r55541 = r55526 * r55540;
double r55542 = r55528 * r55541;
double r55543 = r55538 + r55542;
double r55544 = 6.0;
double r55545 = -r55544;
double r55546 = r55545 * r55526;
double r55547 = r55546 * r55528;
double r55548 = r55543 + r55547;
double r55549 = 3.0;
double r55550 = pow(r55518, r55549);
double r55551 = r55520 - r55523;
double r55552 = r55551 - r55518;
double r55553 = r55552 / r55528;
double r55554 = r55517 * r55553;
double r55555 = r55518 + r55554;
double r55556 = r55555 + r55518;
double r55557 = r55550 + r55556;
double r55558 = r55548 + r55557;
return r55558;
}



Bits error versus x1



Bits error versus x2
Results
Initial program 0.5
Simplified0.5
rmApplied sub-neg0.5
Applied distribute-rgt-in0.5
Applied distribute-rgt-in0.5
Applied associate-+r+0.5
Simplified0.5
rmApplied add-cube-cbrt0.7
Applied associate-*l*0.7
Final simplification0.7
herbie shell --seed 2019351
(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))))))