\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{\mathsf{fma}\left(y, x \cdot 9, b\right)}{z} - \left(a \cdot 4\right) \cdot t\right) \cdot \frac{1}{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 -53766755207279263744:\\
\;\;\;\;\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 7.679179221396538882840418363843709932738 \cdot 10^{-229}:\\
\;\;\;\;\frac{\frac{1}{\frac{z}{\mathsf{fma}\left(y, x \cdot 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 2.315008419706160971974416029817300469089 \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{\mathsf{fma}\left(y, x \cdot 9, b\right)}{z} - \left(a \cdot 4\right) \cdot t\right) \cdot \frac{1}{c}\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c) {
double r459999 = x;
double r460000 = 9.0;
double r460001 = r459999 * r460000;
double r460002 = y;
double r460003 = r460001 * r460002;
double r460004 = z;
double r460005 = 4.0;
double r460006 = r460004 * r460005;
double r460007 = t;
double r460008 = r460006 * r460007;
double r460009 = a;
double r460010 = r460008 * r460009;
double r460011 = r460003 - r460010;
double r460012 = b;
double r460013 = r460011 + r460012;
double r460014 = c;
double r460015 = r460004 * r460014;
double r460016 = r460013 / r460015;
return r460016;
}
double f(double x, double y, double z, double t, double a, double b, double c) {
double r460017 = x;
double r460018 = 9.0;
double r460019 = r460017 * r460018;
double r460020 = y;
double r460021 = r460019 * r460020;
double r460022 = z;
double r460023 = 4.0;
double r460024 = r460022 * r460023;
double r460025 = t;
double r460026 = r460024 * r460025;
double r460027 = a;
double r460028 = r460026 * r460027;
double r460029 = r460021 - r460028;
double r460030 = b;
double r460031 = r460029 + r460030;
double r460032 = c;
double r460033 = r460022 * r460032;
double r460034 = r460031 / r460033;
double r460035 = -inf.0;
bool r460036 = r460034 <= r460035;
double r460037 = fma(r460020, r460019, r460030);
double r460038 = r460037 / r460022;
double r460039 = r460027 * r460023;
double r460040 = r460039 * r460025;
double r460041 = r460038 - r460040;
double r460042 = 1.0;
double r460043 = r460042 / r460032;
double r460044 = r460041 * r460043;
double r460045 = -5.376675520727926e+19;
bool r460046 = r460034 <= r460045;
double r460047 = 7.679179221396539e-229;
bool r460048 = r460034 <= r460047;
double r460049 = r460022 / r460037;
double r460050 = r460042 / r460049;
double r460051 = r460050 - r460040;
double r460052 = r460051 / r460032;
double r460053 = 2.315008419706161e+297;
bool r460054 = r460034 <= r460053;
double r460055 = r460054 ? r460034 : r460044;
double r460056 = r460048 ? r460052 : r460055;
double r460057 = r460046 ? r460034 : r460056;
double r460058 = r460036 ? r460044 : r460057;
return r460058;
}




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.5 |
|---|---|
| Target | 14.6 |
| Herbie | 7.4 |
if (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < -inf.0 or 2.315008419706161e+297 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) Initial program 61.6
Simplified26.0
rmApplied div-inv26.0
if -inf.0 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < -5.376675520727926e+19 or 7.679179221396539e-229 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < 2.315008419706161e+297Initial program 0.6
if -5.376675520727926e+19 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < 7.679179221396539e-229Initial program 17.6
Simplified1.0
rmApplied clear-num1.1
Final simplification7.4
herbie shell --seed 2019325 +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)))