\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:\\
\;\;\;\;-4 \cdot \frac{t \cdot a}{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 -2.049750915246272776707763168040883621167 \cdot 10^{-94}:\\
\;\;\;\;\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 9418504667764352876544:\\
\;\;\;\;\frac{\frac{1}{\frac{z}{\mathsf{fma}\left(x \cdot y, 9, b\right)}} - \left(a \cdot 4\right) \cdot t}{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 1.262932583339488317194724427101820494475 \cdot 10^{299}:\\
\;\;\;\;\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}:\\
\;\;\;\;\frac{1}{\frac{c}{\frac{\mathsf{fma}\left(x \cdot y, 9, b\right)}{z} - a \cdot \left(4 \cdot t\right)}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c) {
double r434693 = x;
double r434694 = 9.0;
double r434695 = r434693 * r434694;
double r434696 = y;
double r434697 = r434695 * r434696;
double r434698 = z;
double r434699 = 4.0;
double r434700 = r434698 * r434699;
double r434701 = t;
double r434702 = r434700 * r434701;
double r434703 = a;
double r434704 = r434702 * r434703;
double r434705 = r434697 - r434704;
double r434706 = b;
double r434707 = r434705 + r434706;
double r434708 = c;
double r434709 = r434698 * r434708;
double r434710 = r434707 / r434709;
return r434710;
}
double f(double x, double y, double z, double t, double a, double b, double c) {
double r434711 = x;
double r434712 = 9.0;
double r434713 = r434711 * r434712;
double r434714 = y;
double r434715 = r434713 * r434714;
double r434716 = z;
double r434717 = 4.0;
double r434718 = r434716 * r434717;
double r434719 = t;
double r434720 = r434718 * r434719;
double r434721 = a;
double r434722 = r434720 * r434721;
double r434723 = r434715 - r434722;
double r434724 = b;
double r434725 = r434723 + r434724;
double r434726 = c;
double r434727 = r434716 * r434726;
double r434728 = r434725 / r434727;
double r434729 = -inf.0;
bool r434730 = r434728 <= r434729;
double r434731 = -4.0;
double r434732 = r434719 * r434721;
double r434733 = r434732 / r434726;
double r434734 = r434731 * r434733;
double r434735 = -2.0497509152462728e-94;
bool r434736 = r434728 <= r434735;
double r434737 = 9.418504667764353e+21;
bool r434738 = r434728 <= r434737;
double r434739 = 1.0;
double r434740 = r434711 * r434714;
double r434741 = fma(r434740, r434712, r434724);
double r434742 = r434716 / r434741;
double r434743 = r434739 / r434742;
double r434744 = r434721 * r434717;
double r434745 = r434744 * r434719;
double r434746 = r434743 - r434745;
double r434747 = r434746 / r434726;
double r434748 = 1.2629325833394883e+299;
bool r434749 = r434728 <= r434748;
double r434750 = r434741 / r434716;
double r434751 = r434717 * r434719;
double r434752 = r434721 * r434751;
double r434753 = r434750 - r434752;
double r434754 = r434726 / r434753;
double r434755 = r434739 / r434754;
double r434756 = r434749 ? r434728 : r434755;
double r434757 = r434738 ? r434747 : r434756;
double r434758 = r434736 ? r434728 : r434757;
double r434759 = r434730 ? r434734 : r434758;
return r434759;
}




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
| Original | 20.7 |
|---|---|
| Target | 14.7 |
| Herbie | 8.4 |
if (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < -inf.0Initial program 64.0
Simplified24.8
rmApplied *-un-lft-identity24.8
Applied *-un-lft-identity24.8
Applied times-frac24.8
Simplified24.8
Simplified24.8
rmApplied clear-num24.9
Taylor expanded around inf 33.1
if -inf.0 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < -2.0497509152462728e-94 or 9.418504667764353e+21 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < 1.2629325833394883e+299Initial program 0.6
if -2.0497509152462728e-94 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < 9.418504667764353e+21Initial program 15.2
Simplified1.2
rmApplied *-un-lft-identity1.2
Applied *-un-lft-identity1.2
Applied times-frac1.2
Simplified1.2
Simplified1.2
rmApplied clear-num1.3
if 1.2629325833394883e+299 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) Initial program 61.7
Simplified28.3
rmApplied *-un-lft-identity28.3
Applied *-un-lft-identity28.3
Applied times-frac28.3
Simplified28.3
Simplified28.1
rmApplied clear-num28.1
rmApplied clear-num28.2
Simplified28.2
Final simplification8.4
herbie shell --seed 2019326 +o rules:numerics
(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)))