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(\left(\left(\frac{\mathsf{fma}\left(3, x1 \cdot x1, 2 \cdot x2 - x1\right) \cdot \left(x1 \cdot x1 - 1\right)}{\mathsf{fma}\left(x1, x1, 1\right) \cdot \left(x1 \cdot x1 - 1\right)} - 3\right) + \mathsf{fma}\left(-3, 1, 3\right)\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 \mathsf{fma}\left(x1, \frac{\mathsf{fma}\left(3, x1 \cdot x1, 2 \cdot x2 - x1\right) \cdot 4}{\mathsf{fma}\left(x1, x1, 1\right)}, 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 r41557 = x1;
double r41558 = 2.0;
double r41559 = r41558 * r41557;
double r41560 = 3.0;
double r41561 = r41560 * r41557;
double r41562 = r41561 * r41557;
double r41563 = x2;
double r41564 = r41558 * r41563;
double r41565 = r41562 + r41564;
double r41566 = r41565 - r41557;
double r41567 = r41557 * r41557;
double r41568 = 1.0;
double r41569 = r41567 + r41568;
double r41570 = r41566 / r41569;
double r41571 = r41559 * r41570;
double r41572 = r41570 - r41560;
double r41573 = r41571 * r41572;
double r41574 = 4.0;
double r41575 = r41574 * r41570;
double r41576 = 6.0;
double r41577 = r41575 - r41576;
double r41578 = r41567 * r41577;
double r41579 = r41573 + r41578;
double r41580 = r41579 * r41569;
double r41581 = r41562 * r41570;
double r41582 = r41580 + r41581;
double r41583 = r41567 * r41557;
double r41584 = r41582 + r41583;
double r41585 = r41584 + r41557;
double r41586 = r41562 - r41564;
double r41587 = r41586 - r41557;
double r41588 = r41587 / r41569;
double r41589 = r41560 * r41588;
double r41590 = r41585 + r41589;
double r41591 = r41557 + r41590;
return r41591;
}
double f(double x1, double x2) {
double r41592 = 3.0;
double r41593 = x1;
double r41594 = 1.0;
double r41595 = fma(r41593, r41593, r41594);
double r41596 = r41592 / r41595;
double r41597 = r41593 * r41593;
double r41598 = x2;
double r41599 = 2.0;
double r41600 = fma(r41598, r41599, r41593);
double r41601 = -r41600;
double r41602 = fma(r41592, r41597, r41601);
double r41603 = r41599 * r41598;
double r41604 = r41603 - r41593;
double r41605 = fma(r41592, r41597, r41604);
double r41606 = r41592 * r41593;
double r41607 = r41606 * r41593;
double r41608 = r41605 * r41607;
double r41609 = r41608 / r41595;
double r41610 = r41593 + r41609;
double r41611 = r41597 - r41594;
double r41612 = r41605 * r41611;
double r41613 = r41595 * r41611;
double r41614 = r41612 / r41613;
double r41615 = r41614 - r41592;
double r41616 = -r41592;
double r41617 = 1.0;
double r41618 = fma(r41616, r41617, r41592);
double r41619 = r41615 + r41618;
double r41620 = r41619 * r41599;
double r41621 = r41593 * r41605;
double r41622 = r41621 / r41595;
double r41623 = 4.0;
double r41624 = r41605 * r41623;
double r41625 = r41624 / r41595;
double r41626 = 6.0;
double r41627 = -r41626;
double r41628 = r41593 * r41627;
double r41629 = fma(r41593, r41625, r41628);
double r41630 = r41593 * r41629;
double r41631 = fma(r41620, r41622, r41630);
double r41632 = fma(r41593, r41597, r41593);
double r41633 = fma(r41631, r41595, r41632);
double r41634 = r41610 + r41633;
double r41635 = fma(r41596, r41602, r41634);
return r41635;
}



Bits error versus x1



Bits error versus x2
Initial program 0.5
Simplified0.3
rmApplied associate-*l*0.3
Simplified0.3
rmApplied add-cube-cbrt0.3
Applied flip-+0.3
Applied associate-/r/0.3
Applied prod-diff0.3
Simplified0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019354 +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))))))