\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} + 9 \cdot \left(x \cdot \frac{1}{\frac{c \cdot z}{y}}\right)\right) - \frac{t}{\frac{c}{a}} \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 -6.191094076037901098261476700144191112987 \cdot 10^{-156}:\\
\;\;\;\;\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 -0.0:\\
\;\;\;\;\frac{1}{\frac{c}{\frac{\mathsf{fma}\left(y \cdot 9, x, b\right)}{z} - \left(t \cdot a\right) \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 3.996505146895602131581339781420621077144 \cdot 10^{300}:\\
\;\;\;\;\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{z}{\frac{y}{c}}} \cdot 9\right) - \frac{t}{\frac{c}{a}} \cdot 4\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c) {
double r35140169 = x;
double r35140170 = 9.0;
double r35140171 = r35140169 * r35140170;
double r35140172 = y;
double r35140173 = r35140171 * r35140172;
double r35140174 = z;
double r35140175 = 4.0;
double r35140176 = r35140174 * r35140175;
double r35140177 = t;
double r35140178 = r35140176 * r35140177;
double r35140179 = a;
double r35140180 = r35140178 * r35140179;
double r35140181 = r35140173 - r35140180;
double r35140182 = b;
double r35140183 = r35140181 + r35140182;
double r35140184 = c;
double r35140185 = r35140174 * r35140184;
double r35140186 = r35140183 / r35140185;
return r35140186;
}
double f(double x, double y, double z, double t, double a, double b, double c) {
double r35140187 = x;
double r35140188 = 9.0;
double r35140189 = r35140187 * r35140188;
double r35140190 = y;
double r35140191 = r35140189 * r35140190;
double r35140192 = z;
double r35140193 = 4.0;
double r35140194 = r35140192 * r35140193;
double r35140195 = t;
double r35140196 = r35140194 * r35140195;
double r35140197 = a;
double r35140198 = r35140196 * r35140197;
double r35140199 = r35140191 - r35140198;
double r35140200 = b;
double r35140201 = r35140199 + r35140200;
double r35140202 = c;
double r35140203 = r35140202 * r35140192;
double r35140204 = r35140201 / r35140203;
double r35140205 = -inf.0;
bool r35140206 = r35140204 <= r35140205;
double r35140207 = r35140200 / r35140203;
double r35140208 = 1.0;
double r35140209 = r35140203 / r35140190;
double r35140210 = r35140208 / r35140209;
double r35140211 = r35140187 * r35140210;
double r35140212 = r35140188 * r35140211;
double r35140213 = r35140207 + r35140212;
double r35140214 = r35140202 / r35140197;
double r35140215 = r35140195 / r35140214;
double r35140216 = r35140215 * r35140193;
double r35140217 = r35140213 - r35140216;
double r35140218 = -6.191094076037901e-156;
bool r35140219 = r35140204 <= r35140218;
double r35140220 = -0.0;
bool r35140221 = r35140204 <= r35140220;
double r35140222 = r35140190 * r35140188;
double r35140223 = fma(r35140222, r35140187, r35140200);
double r35140224 = r35140223 / r35140192;
double r35140225 = r35140195 * r35140197;
double r35140226 = r35140225 * r35140193;
double r35140227 = r35140224 - r35140226;
double r35140228 = r35140202 / r35140227;
double r35140229 = r35140208 / r35140228;
double r35140230 = 3.996505146895602e+300;
bool r35140231 = r35140204 <= r35140230;
double r35140232 = r35140190 / r35140202;
double r35140233 = r35140192 / r35140232;
double r35140234 = r35140187 / r35140233;
double r35140235 = r35140234 * r35140188;
double r35140236 = r35140207 + r35140235;
double r35140237 = r35140236 - r35140216;
double r35140238 = r35140231 ? r35140204 : r35140237;
double r35140239 = r35140221 ? r35140229 : r35140238;
double r35140240 = r35140219 ? r35140204 : r35140239;
double r35140241 = r35140206 ? r35140217 : r35140240;
return r35140241;
}




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.5 |
| Herbie | 3.3 |
if (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < -inf.0Initial program 64.0
Simplified22.7
Taylor expanded around 0 28.3
rmApplied associate-/l*23.2
rmApplied associate-/l*9.5
rmApplied div-inv9.5
if -inf.0 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < -6.191094076037901e-156 or -0.0 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < 3.996505146895602e+300Initial program 0.7
if -6.191094076037901e-156 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < -0.0Initial program 32.0
Simplified0.5
rmApplied clear-num1.1
if 3.996505146895602e+300 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) Initial program 62.6
Simplified26.9
Taylor expanded around 0 30.3
rmApplied associate-/l*25.1
rmApplied associate-/l*15.7
rmApplied associate-/l*11.2
Final simplification3.3
herbie shell --seed 2019168 +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)))