\frac{\left(\left(x \cdot 9\right) \cdot y - \left(\left(z \cdot 4\right) \cdot t\right) \cdot a\right) + b}{z \cdot c}\begin{array}{l}
\mathbf{if}\;\frac{\left(\left(x \cdot 9\right) \cdot y - \left(\left(z \cdot 4\right) \cdot t\right) \cdot a\right) + b}{z \cdot c} = -\infty:\\
\;\;\;\;\left(\frac{b}{z \cdot c} + 9 \cdot \frac{x}{\frac{z \cdot c}{y}}\right) - 4 \cdot \left(t \cdot \frac{a}{c}\right)\\
\mathbf{elif}\;\frac{\left(\left(x \cdot 9\right) \cdot y - \left(\left(z \cdot 4\right) \cdot t\right) \cdot a\right) + b}{z \cdot c} \le -2.044945372715348494311419335429311721877 \cdot 10^{-258}:\\
\;\;\;\;\frac{\left(\left(x \cdot 9\right) \cdot y - \left(\left(z \cdot 4\right) \cdot t\right) \cdot a\right) + b}{z \cdot c}\\
\mathbf{elif}\;\frac{\left(\left(x \cdot 9\right) \cdot y - \left(\left(z \cdot 4\right) \cdot t\right) \cdot a\right) + b}{z \cdot c} \le 0.0:\\
\;\;\;\;\frac{\sqrt[3]{\frac{b + \left(x \cdot 9\right) \cdot y}{z} - \left(a \cdot 4\right) \cdot t} \cdot \sqrt[3]{\frac{b + \left(x \cdot 9\right) \cdot y}{z} - \left(a \cdot 4\right) \cdot t}}{\frac{c}{\sqrt[3]{\frac{b + \left(x \cdot 9\right) \cdot y}{z} - \left(a \cdot 4\right) \cdot t}}}\\
\mathbf{elif}\;\frac{\left(\left(x \cdot 9\right) \cdot y - \left(\left(z \cdot 4\right) \cdot t\right) \cdot a\right) + b}{z \cdot c} \le 5.226249926821728616154563669432090090445 \cdot 10^{297}:\\
\;\;\;\;\frac{\left(\left(x \cdot 9\right) \cdot y - \left(\left(z \cdot 4\right) \cdot t\right) \cdot a\right) + b}{z \cdot c}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{b}{z \cdot c} + 9 \cdot \frac{x}{\left(z \cdot c\right) \cdot \frac{1}{y}}\right) - 4 \cdot \frac{t}{\frac{c}{a}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c) {
double r488671 = x;
double r488672 = 9.0;
double r488673 = r488671 * r488672;
double r488674 = y;
double r488675 = r488673 * r488674;
double r488676 = z;
double r488677 = 4.0;
double r488678 = r488676 * r488677;
double r488679 = t;
double r488680 = r488678 * r488679;
double r488681 = a;
double r488682 = r488680 * r488681;
double r488683 = r488675 - r488682;
double r488684 = b;
double r488685 = r488683 + r488684;
double r488686 = c;
double r488687 = r488676 * r488686;
double r488688 = r488685 / r488687;
return r488688;
}
double f(double x, double y, double z, double t, double a, double b, double c) {
double r488689 = x;
double r488690 = 9.0;
double r488691 = r488689 * r488690;
double r488692 = y;
double r488693 = r488691 * r488692;
double r488694 = z;
double r488695 = 4.0;
double r488696 = r488694 * r488695;
double r488697 = t;
double r488698 = r488696 * r488697;
double r488699 = a;
double r488700 = r488698 * r488699;
double r488701 = r488693 - r488700;
double r488702 = b;
double r488703 = r488701 + r488702;
double r488704 = c;
double r488705 = r488694 * r488704;
double r488706 = r488703 / r488705;
double r488707 = -inf.0;
bool r488708 = r488706 <= r488707;
double r488709 = r488702 / r488705;
double r488710 = r488705 / r488692;
double r488711 = r488689 / r488710;
double r488712 = r488690 * r488711;
double r488713 = r488709 + r488712;
double r488714 = r488699 / r488704;
double r488715 = r488697 * r488714;
double r488716 = r488695 * r488715;
double r488717 = r488713 - r488716;
double r488718 = -2.0449453727153485e-258;
bool r488719 = r488706 <= r488718;
double r488720 = 0.0;
bool r488721 = r488706 <= r488720;
double r488722 = r488702 + r488693;
double r488723 = r488722 / r488694;
double r488724 = r488699 * r488695;
double r488725 = r488724 * r488697;
double r488726 = r488723 - r488725;
double r488727 = cbrt(r488726);
double r488728 = r488727 * r488727;
double r488729 = r488704 / r488727;
double r488730 = r488728 / r488729;
double r488731 = 5.2262499268217286e+297;
bool r488732 = r488706 <= r488731;
double r488733 = 1.0;
double r488734 = r488733 / r488692;
double r488735 = r488705 * r488734;
double r488736 = r488689 / r488735;
double r488737 = r488690 * r488736;
double r488738 = r488709 + r488737;
double r488739 = r488704 / r488699;
double r488740 = r488697 / r488739;
double r488741 = r488695 * r488740;
double r488742 = r488738 - r488741;
double r488743 = r488732 ? r488706 : r488742;
double r488744 = r488721 ? r488730 : r488743;
double r488745 = r488719 ? r488706 : r488744;
double r488746 = r488708 ? r488717 : r488745;
return r488746;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 21.4 |
|---|---|
| Target | 14.7 |
| Herbie | 4.3 |
if (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < -inf.0Initial program 64.0
Simplified23.4
Taylor expanded around 0 28.4
rmApplied associate-/l*12.9
rmApplied *-un-lft-identity12.9
Applied times-frac8.7
Simplified8.7
if -inf.0 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < -2.0449453727153485e-258 or 0.0 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < 5.2262499268217286e+297Initial program 3.7
if -2.0449453727153485e-258 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < 0.0Initial program 35.0
Simplified0.9
rmApplied add-cube-cbrt1.6
Applied associate-/l*1.6
if 5.2262499268217286e+297 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) Initial program 61.9
Simplified27.3
Taylor expanded around 0 30.4
rmApplied associate-/l*22.4
rmApplied associate-/l*15.8
rmApplied div-inv15.8
Final simplification4.3
herbie shell --seed 2019322
(FPCore (x y z t a b c)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, J"
:precision binary64
:herbie-target
(if (< (/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) (* z c)) -1.100156740804105e-171) (/ (+ (- (* (* x 9) y) (* (* z 4) (* t a))) b) (* z c)) (if (< (/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) (* z c)) -0.0) (/ (/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) z) c) (if (< (/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) (* z c)) 1.1708877911747488e-53) (/ (+ (- (* (* x 9) y) (* (* z 4) (* t a))) b) (* z c)) (if (< (/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) (* z c)) 2.876823679546137e+130) (- (+ (* (* 9 (/ y c)) (/ x z)) (/ b (* c z))) (* 4 (/ (* a t) c))) (if (< (/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) (* z c)) 1.3838515042456319e+158) (/ (+ (- (* (* x 9) y) (* (* z 4) (* t a))) b) (* z c)) (- (+ (* 9 (* (/ y (* c z)) x)) (/ b (* c z))) (* 4 (/ (* a t) c))))))))
(/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) (* z c)))