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(\frac{1}{\sqrt[3]{x1 \cdot x1 + 1} \cdot \sqrt[3]{x1 \cdot x1 + 1}}, \frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{\sqrt[3]{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)}, \frac{\left({x1}^{2} \cdot 4\right) \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(-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 r40378 = x1;
double r40379 = 2.0;
double r40380 = r40379 * r40378;
double r40381 = 3.0;
double r40382 = r40381 * r40378;
double r40383 = r40382 * r40378;
double r40384 = x2;
double r40385 = r40379 * r40384;
double r40386 = r40383 + r40385;
double r40387 = r40386 - r40378;
double r40388 = r40378 * r40378;
double r40389 = 1.0;
double r40390 = r40388 + r40389;
double r40391 = r40387 / r40390;
double r40392 = r40380 * r40391;
double r40393 = r40391 - r40381;
double r40394 = r40392 * r40393;
double r40395 = 4.0;
double r40396 = r40395 * r40391;
double r40397 = 6.0;
double r40398 = r40396 - r40397;
double r40399 = r40388 * r40398;
double r40400 = r40394 + r40399;
double r40401 = r40400 * r40390;
double r40402 = r40383 * r40391;
double r40403 = r40401 + r40402;
double r40404 = r40388 * r40378;
double r40405 = r40403 + r40404;
double r40406 = r40405 + r40378;
double r40407 = r40383 - r40385;
double r40408 = r40407 - r40378;
double r40409 = r40408 / r40390;
double r40410 = r40381 * r40409;
double r40411 = r40406 + r40410;
double r40412 = r40378 + r40411;
return r40412;
}
double f(double x1, double x2) {
double r40413 = 3.0;
double r40414 = x1;
double r40415 = 1.0;
double r40416 = fma(r40414, r40414, r40415);
double r40417 = r40413 / r40416;
double r40418 = r40414 * r40414;
double r40419 = x2;
double r40420 = 2.0;
double r40421 = fma(r40419, r40420, r40414);
double r40422 = -r40421;
double r40423 = fma(r40413, r40418, r40422);
double r40424 = r40420 * r40419;
double r40425 = r40424 - r40414;
double r40426 = fma(r40413, r40418, r40425);
double r40427 = r40413 * r40414;
double r40428 = r40427 * r40414;
double r40429 = r40426 * r40428;
double r40430 = r40429 / r40416;
double r40431 = r40414 + r40430;
double r40432 = 1.0;
double r40433 = r40418 + r40415;
double r40434 = cbrt(r40433);
double r40435 = r40434 * r40434;
double r40436 = r40432 / r40435;
double r40437 = r40428 + r40424;
double r40438 = r40437 - r40414;
double r40439 = r40438 / r40434;
double r40440 = -r40413;
double r40441 = fma(r40436, r40439, r40440);
double r40442 = r40441 * r40420;
double r40443 = r40414 * r40426;
double r40444 = r40443 / r40416;
double r40445 = 2.0;
double r40446 = pow(r40414, r40445);
double r40447 = 4.0;
double r40448 = r40446 * r40447;
double r40449 = r40448 * r40426;
double r40450 = r40449 / r40416;
double r40451 = 6.0;
double r40452 = -r40451;
double r40453 = r40418 * r40452;
double r40454 = r40450 + r40453;
double r40455 = fma(r40442, r40444, r40454);
double r40456 = fma(r40414, r40418, r40414);
double r40457 = fma(r40455, r40416, r40456);
double r40458 = r40431 + r40457;
double r40459 = fma(r40417, r40423, r40458);
return r40459;
}



Bits error versus x1



Bits error versus x2
Initial program 0.5
Simplified0.3
rmApplied sub-neg0.3
Applied distribute-lft-in0.3
Simplified0.3
rmApplied add-cube-cbrt0.3
Applied *-un-lft-identity0.3
Applied times-frac0.3
Applied fma-neg0.3
Final simplification0.3
herbie shell --seed 2020049 +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))))))