\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:\\
\;\;\;\;\left(\frac{b}{c \cdot z} + \frac{x}{\frac{c \cdot z}{y}} \cdot 9\right) - 4 \cdot \frac{t}{\frac{c}{a}}\\
\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.726041798377132117721687688195858841577 \cdot 10^{-122}:\\
\;\;\;\;\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 3.517954287598255649538807501367383311311 \cdot 10^{-111}:\\
\;\;\;\;\left(\frac{y}{c} \cdot \left(9 \cdot \frac{x}{z}\right) + \frac{b}{c \cdot z}\right) - \frac{t \cdot a}{c} \cdot 4\\
\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 4.075457173425274978857169952562939780111 \cdot 10^{304}:\\
\;\;\;\;\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}:\\
\;\;\;\;\left(\frac{b}{c \cdot z} + \frac{x}{\frac{c \cdot z}{y}} \cdot 9\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 r36836929 = x;
double r36836930 = 9.0;
double r36836931 = r36836929 * r36836930;
double r36836932 = y;
double r36836933 = r36836931 * r36836932;
double r36836934 = z;
double r36836935 = 4.0;
double r36836936 = r36836934 * r36836935;
double r36836937 = t;
double r36836938 = r36836936 * r36836937;
double r36836939 = a;
double r36836940 = r36836938 * r36836939;
double r36836941 = r36836933 - r36836940;
double r36836942 = b;
double r36836943 = r36836941 + r36836942;
double r36836944 = c;
double r36836945 = r36836934 * r36836944;
double r36836946 = r36836943 / r36836945;
return r36836946;
}
double f(double x, double y, double z, double t, double a, double b, double c) {
double r36836947 = x;
double r36836948 = 9.0;
double r36836949 = r36836947 * r36836948;
double r36836950 = y;
double r36836951 = r36836949 * r36836950;
double r36836952 = z;
double r36836953 = 4.0;
double r36836954 = r36836952 * r36836953;
double r36836955 = t;
double r36836956 = r36836954 * r36836955;
double r36836957 = a;
double r36836958 = r36836956 * r36836957;
double r36836959 = r36836951 - r36836958;
double r36836960 = b;
double r36836961 = r36836959 + r36836960;
double r36836962 = c;
double r36836963 = r36836962 * r36836952;
double r36836964 = r36836961 / r36836963;
double r36836965 = -inf.0;
bool r36836966 = r36836964 <= r36836965;
double r36836967 = r36836960 / r36836963;
double r36836968 = r36836963 / r36836950;
double r36836969 = r36836947 / r36836968;
double r36836970 = r36836969 * r36836948;
double r36836971 = r36836967 + r36836970;
double r36836972 = r36836962 / r36836957;
double r36836973 = r36836955 / r36836972;
double r36836974 = r36836953 * r36836973;
double r36836975 = r36836971 - r36836974;
double r36836976 = -2.726041798377132e-122;
bool r36836977 = r36836964 <= r36836976;
double r36836978 = 3.517954287598256e-111;
bool r36836979 = r36836964 <= r36836978;
double r36836980 = r36836950 / r36836962;
double r36836981 = r36836947 / r36836952;
double r36836982 = r36836948 * r36836981;
double r36836983 = r36836980 * r36836982;
double r36836984 = r36836983 + r36836967;
double r36836985 = r36836955 * r36836957;
double r36836986 = r36836985 / r36836962;
double r36836987 = r36836986 * r36836953;
double r36836988 = r36836984 - r36836987;
double r36836989 = 4.075457173425275e+304;
bool r36836990 = r36836964 <= r36836989;
double r36836991 = r36836990 ? r36836964 : r36836975;
double r36836992 = r36836979 ? r36836988 : r36836991;
double r36836993 = r36836977 ? r36836964 : r36836992;
double r36836994 = r36836966 ? r36836975 : r36836993;
return r36836994;
}




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 | 20.5 |
|---|---|
| Target | 14.5 |
| Herbie | 6.2 |
if (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < -inf.0 or 4.075457173425275e+304 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) Initial program 63.3
Simplified26.7
Taylor expanded around 0 29.9
rmApplied associate-/l*20.1
rmApplied associate-/l*14.5
if -inf.0 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < -2.726041798377132e-122 or 3.517954287598256e-111 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < 4.075457173425275e+304Initial program 0.6
if -2.726041798377132e-122 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < 3.517954287598256e-111Initial program 21.1
Simplified0.7
Taylor expanded around 0 13.5
rmApplied times-frac11.7
Applied associate-*r*11.7
Final simplification6.2
herbie shell --seed 2019169 +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)))