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(\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 \mathsf{fma}\left(\frac{\sqrt[3]{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1} \cdot \sqrt[3]{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}}{\sqrt{x1 \cdot x1 + 1}}, \frac{\sqrt[3]{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}}{\sqrt{x1 \cdot x1 + 1}}, -\sqrt[3]{3} \cdot \left(\sqrt[3]{3} \cdot \sqrt[3]{3}\right)\right) + \mathsf{fma}\left(x1 \cdot x1, 4 \cdot \frac{\mathsf{fma}\left(3 \cdot x1, x1, 2 \cdot x2\right) - x1}{\mathsf{fma}\left(x1, x1, 1\right)} - 6, \left(\left(-3\right) + 3\right) \cdot \left(\frac{\mathsf{fma}\left(3 \cdot x1, x1, 2 \cdot x2\right) - x1}{\mathsf{fma}\left(x1, x1, 1\right)} \cdot \left(2 \cdot x1\right)\right)\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 r86301 = x1;
double r86302 = 2.0;
double r86303 = r86302 * r86301;
double r86304 = 3.0;
double r86305 = r86304 * r86301;
double r86306 = r86305 * r86301;
double r86307 = x2;
double r86308 = r86302 * r86307;
double r86309 = r86306 + r86308;
double r86310 = r86309 - r86301;
double r86311 = r86301 * r86301;
double r86312 = 1.0;
double r86313 = r86311 + r86312;
double r86314 = r86310 / r86313;
double r86315 = r86303 * r86314;
double r86316 = r86314 - r86304;
double r86317 = r86315 * r86316;
double r86318 = 4.0;
double r86319 = r86318 * r86314;
double r86320 = 6.0;
double r86321 = r86319 - r86320;
double r86322 = r86311 * r86321;
double r86323 = r86317 + r86322;
double r86324 = r86323 * r86313;
double r86325 = r86306 * r86314;
double r86326 = r86324 + r86325;
double r86327 = r86311 * r86301;
double r86328 = r86326 + r86327;
double r86329 = r86328 + r86301;
double r86330 = r86306 - r86308;
double r86331 = r86330 - r86301;
double r86332 = r86331 / r86313;
double r86333 = r86304 * r86332;
double r86334 = r86329 + r86333;
double r86335 = r86301 + r86334;
return r86335;
}
double f(double x1, double x2) {
double r86336 = x1;
double r86337 = 2.0;
double r86338 = r86337 * r86336;
double r86339 = 3.0;
double r86340 = r86339 * r86336;
double r86341 = r86340 * r86336;
double r86342 = x2;
double r86343 = r86337 * r86342;
double r86344 = r86341 + r86343;
double r86345 = r86344 - r86336;
double r86346 = r86336 * r86336;
double r86347 = 1.0;
double r86348 = r86346 + r86347;
double r86349 = r86345 / r86348;
double r86350 = r86338 * r86349;
double r86351 = cbrt(r86345);
double r86352 = r86351 * r86351;
double r86353 = sqrt(r86348);
double r86354 = r86352 / r86353;
double r86355 = r86351 / r86353;
double r86356 = cbrt(r86339);
double r86357 = r86356 * r86356;
double r86358 = r86356 * r86357;
double r86359 = -r86358;
double r86360 = fma(r86354, r86355, r86359);
double r86361 = r86350 * r86360;
double r86362 = 4.0;
double r86363 = fma(r86340, r86336, r86343);
double r86364 = r86363 - r86336;
double r86365 = fma(r86336, r86336, r86347);
double r86366 = r86364 / r86365;
double r86367 = r86362 * r86366;
double r86368 = 6.0;
double r86369 = r86367 - r86368;
double r86370 = -r86339;
double r86371 = r86370 + r86339;
double r86372 = r86366 * r86338;
double r86373 = r86371 * r86372;
double r86374 = fma(r86346, r86369, r86373);
double r86375 = r86361 + r86374;
double r86376 = r86375 * r86348;
double r86377 = r86341 * r86349;
double r86378 = r86376 + r86377;
double r86379 = r86346 * r86336;
double r86380 = r86378 + r86379;
double r86381 = r86380 + r86336;
double r86382 = r86341 - r86343;
double r86383 = r86382 - r86336;
double r86384 = r86383 / r86348;
double r86385 = r86339 * r86384;
double r86386 = r86381 + r86385;
double r86387 = r86336 + r86386;
return r86387;
}



Bits error versus x1



Bits error versus x2
Initial program 0.5
rmApplied add-cube-cbrt0.5
Applied add-sqr-sqrt0.5
Applied add-cube-cbrt0.7
Applied times-frac0.7
Applied prod-diff0.7
Applied distribute-lft-in0.7
Applied associate-+l+0.7
Simplified0.7
Final simplification0.7
herbie shell --seed 2019325 +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))))))