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 + (3 \cdot \left(\frac{x1 \cdot \left(x1 \cdot 3\right) - (2 \cdot x2 + x1)_*}{(x1 \cdot x1 + 1)_*}\right) + \left((x1 \cdot \left(x1 \cdot x1\right) + \left((\left(\frac{(x2 \cdot 2 + \left(x1 \cdot \left(x1 \cdot 3\right)\right))_* - x1}{(x1 \cdot x1 + 1)_*}\right) \cdot \left(x1 \cdot \left(x1 \cdot 3\right)\right) + \left((x1 \cdot x1 + 1)_* \cdot (\left((\left(\frac{(x2 \cdot 2 + \left(x1 \cdot \left(x1 \cdot 3\right)\right))_* - x1}{(x1 \cdot x1 + 1)_*}\right) \cdot 4 + -6)_*\right) \cdot \left(x1 \cdot x1\right) + \left(\frac{\left(\left(2 \cdot x1\right) \cdot (1 \cdot \left((x2 \cdot 2 + \left(x1 \cdot \left(x1 \cdot 3\right)\right))_*\right) + \left(\sqrt[3]{x1} \cdot \left(\left(-\sqrt[3]{x1}\right) \cdot \sqrt[3]{x1}\right)\right))_*\right) \cdot \left(\frac{(x2 \cdot 2 + \left(x1 \cdot \left(x1 \cdot 3\right)\right))_* - x1}{(x1 \cdot x1 + 1)_*} - 3\right) + \left((\left(-\sqrt[3]{x1}\right) \cdot \left(\sqrt[3]{x1} \cdot \sqrt[3]{x1}\right) + \left(\sqrt[3]{x1} \cdot \left(\sqrt[3]{x1} \cdot \sqrt[3]{x1}\right)\right))_* \cdot \left(2 \cdot x1\right)\right) \cdot \left(\frac{(x2 \cdot 2 + \left(x1 \cdot \left(x1 \cdot 3\right)\right))_* - x1}{(x1 \cdot x1 + 1)_*} - 3\right)}{(x1 \cdot x1 + 1)_*}\right))_*\right))_*\right))_* + x1\right))_*double f(double x1, double x2) {
double r13565278 = x1;
double r13565279 = 2.0;
double r13565280 = r13565279 * r13565278;
double r13565281 = 3.0;
double r13565282 = r13565281 * r13565278;
double r13565283 = r13565282 * r13565278;
double r13565284 = x2;
double r13565285 = r13565279 * r13565284;
double r13565286 = r13565283 + r13565285;
double r13565287 = r13565286 - r13565278;
double r13565288 = r13565278 * r13565278;
double r13565289 = 1.0;
double r13565290 = r13565288 + r13565289;
double r13565291 = r13565287 / r13565290;
double r13565292 = r13565280 * r13565291;
double r13565293 = r13565291 - r13565281;
double r13565294 = r13565292 * r13565293;
double r13565295 = 4.0;
double r13565296 = r13565295 * r13565291;
double r13565297 = 6.0;
double r13565298 = r13565296 - r13565297;
double r13565299 = r13565288 * r13565298;
double r13565300 = r13565294 + r13565299;
double r13565301 = r13565300 * r13565290;
double r13565302 = r13565283 * r13565291;
double r13565303 = r13565301 + r13565302;
double r13565304 = r13565288 * r13565278;
double r13565305 = r13565303 + r13565304;
double r13565306 = r13565305 + r13565278;
double r13565307 = r13565283 - r13565285;
double r13565308 = r13565307 - r13565278;
double r13565309 = r13565308 / r13565290;
double r13565310 = r13565281 * r13565309;
double r13565311 = r13565306 + r13565310;
double r13565312 = r13565278 + r13565311;
return r13565312;
}
double f(double x1, double x2) {
double r13565313 = x1;
double r13565314 = 3.0;
double r13565315 = r13565313 * r13565314;
double r13565316 = r13565313 * r13565315;
double r13565317 = 2.0;
double r13565318 = x2;
double r13565319 = fma(r13565317, r13565318, r13565313);
double r13565320 = r13565316 - r13565319;
double r13565321 = 1.0;
double r13565322 = fma(r13565313, r13565313, r13565321);
double r13565323 = r13565320 / r13565322;
double r13565324 = r13565313 * r13565313;
double r13565325 = fma(r13565318, r13565317, r13565316);
double r13565326 = r13565325 - r13565313;
double r13565327 = r13565326 / r13565322;
double r13565328 = 4.0;
double r13565329 = -6.0;
double r13565330 = fma(r13565327, r13565328, r13565329);
double r13565331 = r13565317 * r13565313;
double r13565332 = cbrt(r13565313);
double r13565333 = -r13565332;
double r13565334 = r13565333 * r13565332;
double r13565335 = r13565332 * r13565334;
double r13565336 = fma(r13565321, r13565325, r13565335);
double r13565337 = r13565331 * r13565336;
double r13565338 = r13565327 - r13565314;
double r13565339 = r13565337 * r13565338;
double r13565340 = r13565332 * r13565332;
double r13565341 = r13565332 * r13565340;
double r13565342 = fma(r13565333, r13565340, r13565341);
double r13565343 = r13565342 * r13565331;
double r13565344 = r13565343 * r13565338;
double r13565345 = r13565339 + r13565344;
double r13565346 = r13565345 / r13565322;
double r13565347 = fma(r13565330, r13565324, r13565346);
double r13565348 = r13565322 * r13565347;
double r13565349 = fma(r13565327, r13565316, r13565348);
double r13565350 = fma(r13565313, r13565324, r13565349);
double r13565351 = r13565350 + r13565313;
double r13565352 = fma(r13565314, r13565323, r13565351);
double r13565353 = r13565313 + r13565352;
return r13565353;
}



Bits error versus x1



Bits error versus x2
Initial program 0.5
Simplified0.3
rmApplied associate-*r/0.3
Applied associate-*r/0.3
rmApplied add-cube-cbrt0.3
Applied *-un-lft-identity0.3
Applied prod-diff0.3
Applied distribute-rgt-in0.3
Applied distribute-lft-in0.3
Final simplification0.3
herbie shell --seed 2019119 +o rules:numerics
(FPCore (x1 x2)
:name "Rosa's FloatVsDoubleBenchmark"
(+ 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))))))