\left(x \cdot 2.0 - \left(\left(y \cdot 9.0\right) \cdot z\right) \cdot t\right) + \left(a \cdot 27.0\right) \cdot b
\begin{array}{l}
\mathbf{if}\;\left(y \cdot 9.0\right) \cdot z = -\infty:\\
\;\;\;\;\left(x \cdot 2.0 - \left(\left(z \cdot 9.0\right) \cdot t\right) \cdot y\right) + \left(27.0 \cdot b\right) \cdot a\\
\mathbf{elif}\;\left(y \cdot 9.0\right) \cdot z \le 5.9361705210496 \cdot 10^{-36}:\\
\;\;\;\;x \cdot 2.0 + \left(27.0 \cdot \left(a \cdot b\right) - \left(t \cdot \left(z \cdot y\right)\right) \cdot 9.0\right)\\
\mathbf{else}:\\
\;\;\;\;\left(x \cdot 2.0 - \left(y \cdot 9.0\right) \cdot \left(z \cdot t\right)\right) + \left(27.0 \cdot b\right) \cdot a\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r35666644 = x;
double r35666645 = 2.0;
double r35666646 = r35666644 * r35666645;
double r35666647 = y;
double r35666648 = 9.0;
double r35666649 = r35666647 * r35666648;
double r35666650 = z;
double r35666651 = r35666649 * r35666650;
double r35666652 = t;
double r35666653 = r35666651 * r35666652;
double r35666654 = r35666646 - r35666653;
double r35666655 = a;
double r35666656 = 27.0;
double r35666657 = r35666655 * r35666656;
double r35666658 = b;
double r35666659 = r35666657 * r35666658;
double r35666660 = r35666654 + r35666659;
return r35666660;
}
double f(double x, double y, double z, double t, double a, double b) {
double r35666661 = y;
double r35666662 = 9.0;
double r35666663 = r35666661 * r35666662;
double r35666664 = z;
double r35666665 = r35666663 * r35666664;
double r35666666 = -inf.0;
bool r35666667 = r35666665 <= r35666666;
double r35666668 = x;
double r35666669 = 2.0;
double r35666670 = r35666668 * r35666669;
double r35666671 = r35666664 * r35666662;
double r35666672 = t;
double r35666673 = r35666671 * r35666672;
double r35666674 = r35666673 * r35666661;
double r35666675 = r35666670 - r35666674;
double r35666676 = 27.0;
double r35666677 = b;
double r35666678 = r35666676 * r35666677;
double r35666679 = a;
double r35666680 = r35666678 * r35666679;
double r35666681 = r35666675 + r35666680;
double r35666682 = 5.9361705210496e-36;
bool r35666683 = r35666665 <= r35666682;
double r35666684 = r35666679 * r35666677;
double r35666685 = r35666676 * r35666684;
double r35666686 = r35666664 * r35666661;
double r35666687 = r35666672 * r35666686;
double r35666688 = r35666687 * r35666662;
double r35666689 = r35666685 - r35666688;
double r35666690 = r35666670 + r35666689;
double r35666691 = r35666664 * r35666672;
double r35666692 = r35666663 * r35666691;
double r35666693 = r35666670 - r35666692;
double r35666694 = r35666693 + r35666680;
double r35666695 = r35666683 ? r35666690 : r35666694;
double r35666696 = r35666667 ? r35666681 : r35666695;
return r35666696;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
Results
| Original | 3.7 |
|---|---|
| Target | 2.5 |
| Herbie | 1.3 |
if (* (* y 9.0) z) < -inf.0Initial program 64.0
rmApplied associate-*l*2.7
rmApplied associate-*l*3.0
rmApplied associate-*l*0.9
rmApplied associate-*r*1.2
if -inf.0 < (* (* y 9.0) z) < 5.9361705210496e-36Initial program 0.4
rmApplied associate-*l*3.6
rmApplied associate-*l*3.6
rmApplied associate-*l*3.6
rmApplied sub-neg3.6
Applied associate-+l+3.6
Simplified0.3
if 5.9361705210496e-36 < (* (* y 9.0) z) Initial program 7.1
rmApplied associate-*l*4.4
rmApplied associate-*l*4.5
Final simplification1.3
herbie shell --seed 2019165
(FPCore (x y z t a b)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, A"
:herbie-target
(if (< y 7.590524218811189e-161) (+ (- (* x 2.0) (* (* (* y 9.0) z) t)) (* a (* 27.0 b))) (+ (- (* x 2.0) (* 9.0 (* y (* t z)))) (* (* a 27.0) b)))
(+ (- (* x 2.0) (* (* (* y 9.0) z) t)) (* (* a 27.0) b)))