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(\left(\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 \left(\sqrt[3]{\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)} \cdot \sqrt[3]{\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)\right) \cdot \left(\sqrt[3]{\sqrt[3]{\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)} \cdot \sqrt[3]{\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)}} \cdot \sqrt[3]{\sqrt[3]{\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)\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 r43445 = x1;
double r43446 = 2.0;
double r43447 = r43446 * r43445;
double r43448 = 3.0;
double r43449 = r43448 * r43445;
double r43450 = r43449 * r43445;
double r43451 = x2;
double r43452 = r43446 * r43451;
double r43453 = r43450 + r43452;
double r43454 = r43453 - r43445;
double r43455 = r43445 * r43445;
double r43456 = 1.0;
double r43457 = r43455 + r43456;
double r43458 = r43454 / r43457;
double r43459 = r43447 * r43458;
double r43460 = r43458 - r43448;
double r43461 = r43459 * r43460;
double r43462 = 4.0;
double r43463 = r43462 * r43458;
double r43464 = 6.0;
double r43465 = r43463 - r43464;
double r43466 = r43455 * r43465;
double r43467 = r43461 + r43466;
double r43468 = r43467 * r43457;
double r43469 = r43450 * r43458;
double r43470 = r43468 + r43469;
double r43471 = r43455 * r43445;
double r43472 = r43470 + r43471;
double r43473 = r43472 + r43445;
double r43474 = r43450 - r43452;
double r43475 = r43474 - r43445;
double r43476 = r43475 / r43457;
double r43477 = r43448 * r43476;
double r43478 = r43473 + r43477;
double r43479 = r43445 + r43478;
return r43479;
}
double f(double x1, double x2) {
double r43480 = 3.0;
double r43481 = x1;
double r43482 = 1.0;
double r43483 = fma(r43481, r43481, r43482);
double r43484 = r43480 / r43483;
double r43485 = r43481 * r43481;
double r43486 = x2;
double r43487 = 2.0;
double r43488 = fma(r43486, r43487, r43481);
double r43489 = -r43488;
double r43490 = fma(r43480, r43485, r43489);
double r43491 = r43487 * r43486;
double r43492 = r43491 - r43481;
double r43493 = fma(r43480, r43485, r43492);
double r43494 = r43480 * r43481;
double r43495 = r43494 * r43481;
double r43496 = r43493 * r43495;
double r43497 = r43496 / r43483;
double r43498 = r43481 + r43497;
double r43499 = r43495 + r43491;
double r43500 = r43499 - r43481;
double r43501 = r43485 + r43482;
double r43502 = r43500 / r43501;
double r43503 = r43502 - r43480;
double r43504 = r43503 * r43487;
double r43505 = r43481 * r43493;
double r43506 = r43505 / r43483;
double r43507 = 4.0;
double r43508 = r43493 * r43507;
double r43509 = r43508 / r43483;
double r43510 = 6.0;
double r43511 = -r43510;
double r43512 = r43481 * r43511;
double r43513 = fma(r43481, r43509, r43512);
double r43514 = cbrt(r43513);
double r43515 = r43514 * r43514;
double r43516 = r43481 * r43515;
double r43517 = cbrt(r43515);
double r43518 = cbrt(r43514);
double r43519 = r43517 * r43518;
double r43520 = r43516 * r43519;
double r43521 = fma(r43504, r43506, r43520);
double r43522 = fma(r43481, r43485, r43481);
double r43523 = fma(r43521, r43483, r43522);
double r43524 = r43498 + r43523;
double r43525 = fma(r43484, r43490, r43524);
return r43525;
}



Bits error versus x1



Bits error versus x2
Initial program 0.5
Simplified0.3
rmApplied associate-*l*0.3
Simplified0.3
rmApplied add-cube-cbrt0.4
Applied associate-*r*0.4
rmApplied add-cube-cbrt0.4
Applied cbrt-prod0.4
Final simplification0.4
herbie shell --seed 2020002 +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))))))