\frac{\left(\left(x \cdot 9.0\right) \cdot y - \left(\left(z \cdot 4.0\right) \cdot t\right) \cdot a\right) + b}{z \cdot c}\begin{array}{l}
\mathbf{if}\;\frac{\left(\left(x \cdot 9.0\right) \cdot y - \left(\left(z \cdot 4.0\right) \cdot t\right) \cdot a\right) + b}{c \cdot z} \le -3.4143397402486294 \cdot 10^{-292}:\\
\;\;\;\;\left(\frac{b}{c \cdot z} + \frac{x}{\frac{c \cdot z}{y}} \cdot 9.0\right) - 4.0 \cdot \frac{a}{\frac{c}{t}}\\
\mathbf{elif}\;\frac{\left(\left(x \cdot 9.0\right) \cdot y - \left(\left(z \cdot 4.0\right) \cdot t\right) \cdot a\right) + b}{c \cdot z} \le 1.4789431977947666 \cdot 10^{+196}:\\
\;\;\;\;\frac{\frac{1}{z} \cdot \mathsf{fma}\left(9.0, y \cdot x, b\right) - \left(t \cdot a\right) \cdot 4.0}{c}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{b}{c \cdot z} + \frac{x}{\frac{c \cdot z}{y}} \cdot 9.0\right) - \left(a \cdot \frac{t}{c}\right) \cdot 4.0\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c) {
double r32864494 = x;
double r32864495 = 9.0;
double r32864496 = r32864494 * r32864495;
double r32864497 = y;
double r32864498 = r32864496 * r32864497;
double r32864499 = z;
double r32864500 = 4.0;
double r32864501 = r32864499 * r32864500;
double r32864502 = t;
double r32864503 = r32864501 * r32864502;
double r32864504 = a;
double r32864505 = r32864503 * r32864504;
double r32864506 = r32864498 - r32864505;
double r32864507 = b;
double r32864508 = r32864506 + r32864507;
double r32864509 = c;
double r32864510 = r32864499 * r32864509;
double r32864511 = r32864508 / r32864510;
return r32864511;
}
double f(double x, double y, double z, double t, double a, double b, double c) {
double r32864512 = x;
double r32864513 = 9.0;
double r32864514 = r32864512 * r32864513;
double r32864515 = y;
double r32864516 = r32864514 * r32864515;
double r32864517 = z;
double r32864518 = 4.0;
double r32864519 = r32864517 * r32864518;
double r32864520 = t;
double r32864521 = r32864519 * r32864520;
double r32864522 = a;
double r32864523 = r32864521 * r32864522;
double r32864524 = r32864516 - r32864523;
double r32864525 = b;
double r32864526 = r32864524 + r32864525;
double r32864527 = c;
double r32864528 = r32864527 * r32864517;
double r32864529 = r32864526 / r32864528;
double r32864530 = -3.4143397402486294e-292;
bool r32864531 = r32864529 <= r32864530;
double r32864532 = r32864525 / r32864528;
double r32864533 = r32864528 / r32864515;
double r32864534 = r32864512 / r32864533;
double r32864535 = r32864534 * r32864513;
double r32864536 = r32864532 + r32864535;
double r32864537 = r32864527 / r32864520;
double r32864538 = r32864522 / r32864537;
double r32864539 = r32864518 * r32864538;
double r32864540 = r32864536 - r32864539;
double r32864541 = 1.4789431977947666e+196;
bool r32864542 = r32864529 <= r32864541;
double r32864543 = 1.0;
double r32864544 = r32864543 / r32864517;
double r32864545 = r32864515 * r32864512;
double r32864546 = fma(r32864513, r32864545, r32864525);
double r32864547 = r32864544 * r32864546;
double r32864548 = r32864520 * r32864522;
double r32864549 = r32864548 * r32864518;
double r32864550 = r32864547 - r32864549;
double r32864551 = r32864550 / r32864527;
double r32864552 = r32864520 / r32864527;
double r32864553 = r32864522 * r32864552;
double r32864554 = r32864553 * r32864518;
double r32864555 = r32864536 - r32864554;
double r32864556 = r32864542 ? r32864551 : r32864555;
double r32864557 = r32864531 ? r32864540 : r32864556;
return r32864557;
}




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 | 19.6 |
|---|---|
| Target | 13.7 |
| Herbie | 7.2 |
if (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < -3.4143397402486294e-292Initial program 11.7
Simplified11.9
Taylor expanded around 0 6.8
rmApplied associate-/l*6.9
rmApplied associate-/l*6.4
if -3.4143397402486294e-292 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < 1.4789431977947666e+196Initial program 11.3
Simplified4.6
rmApplied div-inv4.7
if 1.4789431977947666e+196 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) Initial program 43.1
Simplified24.3
Taylor expanded around 0 22.5
rmApplied associate-/l*17.9
rmApplied *-un-lft-identity17.9
Applied times-frac12.0
Simplified12.0
Final simplification7.2
herbie shell --seed 2019163 +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)))