\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}{c \cdot z} = -\infty:\\
\;\;\;\;\frac{1}{c} \cdot \left(\mathsf{fma}\left(x \cdot \frac{y}{z}, 9, \frac{b}{z}\right) - t \cdot \left(a \cdot 4\right)\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}{c \cdot z} \le -1.143656966902138628653369801663880934825 \cdot 10^{-208}:\\
\;\;\;\;\frac{\left(\left(x \cdot 9\right) \cdot y - \left(\left(z \cdot 4\right) \cdot t\right) \cdot a\right) + b}{c \cdot z}\\
\mathbf{elif}\;\frac{\left(\left(x \cdot 9\right) \cdot y - \left(\left(z \cdot 4\right) \cdot t\right) \cdot a\right) + b}{c \cdot z} \le 2.218303569588247401770491780248048496182 \cdot 10^{-286}:\\
\;\;\;\;\frac{1}{c} \cdot \left(\mathsf{fma}\left(x \cdot \frac{y}{z}, 9, \frac{b}{z}\right) - t \cdot \left(a \cdot 4\right)\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}{c \cdot z} \le 1.646526307585928545464016302227471938453 \cdot 10^{294}:\\
\;\;\;\;\frac{\left(\left(x \cdot 9\right) \cdot y - \left(\left(z \cdot 4\right) \cdot t\right) \cdot a\right) + b}{c \cdot z}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(9, \frac{x}{c} \cdot \frac{y}{z}, \frac{\frac{b}{z}}{c} - \frac{t \cdot a}{c} \cdot 4\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c) {
double r688898 = x;
double r688899 = 9.0;
double r688900 = r688898 * r688899;
double r688901 = y;
double r688902 = r688900 * r688901;
double r688903 = z;
double r688904 = 4.0;
double r688905 = r688903 * r688904;
double r688906 = t;
double r688907 = r688905 * r688906;
double r688908 = a;
double r688909 = r688907 * r688908;
double r688910 = r688902 - r688909;
double r688911 = b;
double r688912 = r688910 + r688911;
double r688913 = c;
double r688914 = r688903 * r688913;
double r688915 = r688912 / r688914;
return r688915;
}
double f(double x, double y, double z, double t, double a, double b, double c) {
double r688916 = x;
double r688917 = 9.0;
double r688918 = r688916 * r688917;
double r688919 = y;
double r688920 = r688918 * r688919;
double r688921 = z;
double r688922 = 4.0;
double r688923 = r688921 * r688922;
double r688924 = t;
double r688925 = r688923 * r688924;
double r688926 = a;
double r688927 = r688925 * r688926;
double r688928 = r688920 - r688927;
double r688929 = b;
double r688930 = r688928 + r688929;
double r688931 = c;
double r688932 = r688931 * r688921;
double r688933 = r688930 / r688932;
double r688934 = -inf.0;
bool r688935 = r688933 <= r688934;
double r688936 = 1.0;
double r688937 = r688936 / r688931;
double r688938 = r688919 / r688921;
double r688939 = r688916 * r688938;
double r688940 = r688929 / r688921;
double r688941 = fma(r688939, r688917, r688940);
double r688942 = r688926 * r688922;
double r688943 = r688924 * r688942;
double r688944 = r688941 - r688943;
double r688945 = r688937 * r688944;
double r688946 = -1.1436569669021386e-208;
bool r688947 = r688933 <= r688946;
double r688948 = 2.2183035695882474e-286;
bool r688949 = r688933 <= r688948;
double r688950 = 1.6465263075859285e+294;
bool r688951 = r688933 <= r688950;
double r688952 = r688916 / r688931;
double r688953 = r688952 * r688938;
double r688954 = r688940 / r688931;
double r688955 = r688924 * r688926;
double r688956 = r688955 / r688931;
double r688957 = r688956 * r688922;
double r688958 = r688954 - r688957;
double r688959 = fma(r688917, r688953, r688958);
double r688960 = r688951 ? r688933 : r688959;
double r688961 = r688949 ? r688945 : r688960;
double r688962 = r688947 ? r688933 : r688961;
double r688963 = r688935 ? r688945 : r688962;
return r688963;
}




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.3 |
|---|---|
| Target | 14.3 |
| Herbie | 4.8 |
if (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < -inf.0 or -1.1436569669021386e-208 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < 2.2183035695882474e-286Initial program 44.8
Simplified10.1
rmApplied div-inv10.2
Taylor expanded around 0 10.1
Simplified7.9
rmApplied div-inv7.9
Applied associate-*l*7.6
Simplified7.6
if -inf.0 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < -1.1436569669021386e-208 or 2.2183035695882474e-286 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < 1.6465263075859285e+294Initial program 0.6
if 1.6465263075859285e+294 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) Initial program 61.0
Simplified27.4
rmApplied div-inv27.5
Taylor expanded around 0 27.3
Simplified17.7
Taylor expanded around 0 30.4
Simplified15.8
Final simplification4.8
herbie shell --seed 2019196 +o rules:numerics
(FPCore (x y z t a b c)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, J"
:herbie-target
(if (< (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) -1.100156740804105e-171) (/ (+ (- (* (* x 9.0) y) (* (* z 4.0) (* t a))) b) (* z c)) (if (< (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) -0.0) (/ (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) z) c) (if (< (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) 1.1708877911747488e-53) (/ (+ (- (* (* x 9.0) y) (* (* z 4.0) (* t a))) b) (* z c)) (if (< (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) 2.876823679546137e+130) (- (+ (* (* 9.0 (/ y c)) (/ x z)) (/ b (* c z))) (* 4.0 (/ (* a t) c))) (if (< (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) 1.3838515042456319e+158) (/ (+ (- (* (* x 9.0) y) (* (* z 4.0) (* t a))) b) (* z c)) (- (+ (* 9.0 (* (/ y (* c z)) x)) (/ b (* c z))) (* 4.0 (/ (* a t) c))))))))
(/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)))