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)\frac{3}{\mathsf{fma}\left(x1, x1, 1\right)} \cdot \mathsf{fma}\left(3, x1 \cdot x1, -\mathsf{fma}\left(x2, 2, x1\right)\right) + \left(\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)}, x1 \cdot \left(x1 \cdot \frac{\mathsf{fma}\left(3, x1 \cdot x1, 2 \cdot x2 - x1\right) \cdot 4}{\mathsf{fma}\left(x1, x1, 1\right)}\right) + x1 \cdot \left(x1 \cdot \left(-6\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 r42338 = x1;
double r42339 = 2.0;
double r42340 = r42339 * r42338;
double r42341 = 3.0;
double r42342 = r42341 * r42338;
double r42343 = r42342 * r42338;
double r42344 = x2;
double r42345 = r42339 * r42344;
double r42346 = r42343 + r42345;
double r42347 = r42346 - r42338;
double r42348 = r42338 * r42338;
double r42349 = 1.0;
double r42350 = r42348 + r42349;
double r42351 = r42347 / r42350;
double r42352 = r42340 * r42351;
double r42353 = r42351 - r42341;
double r42354 = r42352 * r42353;
double r42355 = 4.0;
double r42356 = r42355 * r42351;
double r42357 = 6.0;
double r42358 = r42356 - r42357;
double r42359 = r42348 * r42358;
double r42360 = r42354 + r42359;
double r42361 = r42360 * r42350;
double r42362 = r42343 * r42351;
double r42363 = r42361 + r42362;
double r42364 = r42348 * r42338;
double r42365 = r42363 + r42364;
double r42366 = r42365 + r42338;
double r42367 = r42343 - r42345;
double r42368 = r42367 - r42338;
double r42369 = r42368 / r42350;
double r42370 = r42341 * r42369;
double r42371 = r42366 + r42370;
double r42372 = r42338 + r42371;
return r42372;
}
double f(double x1, double x2) {
double r42373 = 3.0;
double r42374 = x1;
double r42375 = 1.0;
double r42376 = fma(r42374, r42374, r42375);
double r42377 = r42373 / r42376;
double r42378 = r42374 * r42374;
double r42379 = x2;
double r42380 = 2.0;
double r42381 = fma(r42379, r42380, r42374);
double r42382 = -r42381;
double r42383 = fma(r42373, r42378, r42382);
double r42384 = r42377 * r42383;
double r42385 = r42380 * r42379;
double r42386 = r42385 - r42374;
double r42387 = fma(r42373, r42378, r42386);
double r42388 = r42373 * r42374;
double r42389 = r42388 * r42374;
double r42390 = r42387 * r42389;
double r42391 = r42390 / r42376;
double r42392 = r42374 + r42391;
double r42393 = r42389 + r42385;
double r42394 = r42393 - r42374;
double r42395 = r42378 + r42375;
double r42396 = r42394 / r42395;
double r42397 = r42396 - r42373;
double r42398 = r42397 * r42380;
double r42399 = r42374 * r42387;
double r42400 = r42399 / r42376;
double r42401 = 4.0;
double r42402 = r42387 * r42401;
double r42403 = r42402 / r42376;
double r42404 = r42374 * r42403;
double r42405 = r42374 * r42404;
double r42406 = 6.0;
double r42407 = -r42406;
double r42408 = r42374 * r42407;
double r42409 = r42374 * r42408;
double r42410 = r42405 + r42409;
double r42411 = fma(r42398, r42400, r42410);
double r42412 = fma(r42374, r42378, r42374);
double r42413 = fma(r42411, r42376, r42412);
double r42414 = r42392 + r42413;
double r42415 = r42384 + r42414;
return r42415;
}



Bits error versus x1



Bits error versus x2
Initial program 0.5
Simplified0.3
rmApplied associate-*l*0.3
Simplified0.3
rmApplied fma-udef0.3
Applied distribute-lft-in0.3
rmApplied fma-udef0.4
Final simplification0.4
herbie shell --seed 2020057 +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))))))