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 r43365 = x1;
double r43366 = 2.0;
double r43367 = r43366 * r43365;
double r43368 = 3.0;
double r43369 = r43368 * r43365;
double r43370 = r43369 * r43365;
double r43371 = x2;
double r43372 = r43366 * r43371;
double r43373 = r43370 + r43372;
double r43374 = r43373 - r43365;
double r43375 = r43365 * r43365;
double r43376 = 1.0;
double r43377 = r43375 + r43376;
double r43378 = r43374 / r43377;
double r43379 = r43367 * r43378;
double r43380 = r43378 - r43368;
double r43381 = r43379 * r43380;
double r43382 = 4.0;
double r43383 = r43382 * r43378;
double r43384 = 6.0;
double r43385 = r43383 - r43384;
double r43386 = r43375 * r43385;
double r43387 = r43381 + r43386;
double r43388 = r43387 * r43377;
double r43389 = r43370 * r43378;
double r43390 = r43388 + r43389;
double r43391 = r43375 * r43365;
double r43392 = r43390 + r43391;
double r43393 = r43392 + r43365;
double r43394 = r43370 - r43372;
double r43395 = r43394 - r43365;
double r43396 = r43395 / r43377;
double r43397 = r43368 * r43396;
double r43398 = r43393 + r43397;
double r43399 = r43365 + r43398;
return r43399;
}
double f(double x1, double x2) {
double r43400 = 3.0;
double r43401 = x1;
double r43402 = 1.0;
double r43403 = fma(r43401, r43401, r43402);
double r43404 = r43400 / r43403;
double r43405 = r43401 * r43401;
double r43406 = x2;
double r43407 = 2.0;
double r43408 = fma(r43406, r43407, r43401);
double r43409 = -r43408;
double r43410 = fma(r43400, r43405, r43409);
double r43411 = r43407 * r43406;
double r43412 = r43411 - r43401;
double r43413 = fma(r43400, r43405, r43412);
double r43414 = r43400 * r43401;
double r43415 = r43414 * r43401;
double r43416 = r43413 * r43415;
double r43417 = r43416 / r43403;
double r43418 = r43401 + r43417;
double r43419 = 1.0;
double r43420 = r43405 + r43402;
double r43421 = cbrt(r43420);
double r43422 = r43421 * r43421;
double r43423 = r43419 / r43422;
double r43424 = r43415 + r43411;
double r43425 = r43424 - r43401;
double r43426 = r43425 / r43421;
double r43427 = -r43400;
double r43428 = fma(r43423, r43426, r43427);
double r43429 = r43428 * r43407;
double r43430 = r43401 * r43413;
double r43431 = r43430 / r43403;
double r43432 = 2.0;
double r43433 = pow(r43401, r43432);
double r43434 = 4.0;
double r43435 = r43433 * r43434;
double r43436 = r43435 * r43413;
double r43437 = r43436 / r43403;
double r43438 = 6.0;
double r43439 = -r43438;
double r43440 = r43405 * r43439;
double r43441 = r43437 + r43440;
double r43442 = fma(r43429, r43431, r43441);
double r43443 = fma(r43401, r43405, r43401);
double r43444 = fma(r43442, r43403, r43443);
double r43445 = r43418 + r43444;
double r43446 = fma(r43404, r43410, r43445);
return r43446;
}



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 2020034 +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))))))