\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}\;z \le -2.0374603215218364316667016635065438611 \cdot 10^{-79}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{x}{z}, y \cdot 9, \frac{b}{z} - a \cdot \left(4 \cdot t\right)\right)}{c}\\
\mathbf{elif}\;z \le 9.378696137572198364826430485554169585975 \cdot 10^{-117}:\\
\;\;\;\;\frac{b + \left(y \cdot \left(x \cdot 9\right) - \left(t \cdot \left(4 \cdot z\right)\right) \cdot a\right)}{z \cdot c}\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{x}{z}, y \cdot 9, \frac{b}{z} - a \cdot \left(4 \cdot t\right)\right)}{c}\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c) {
double r32005572 = x;
double r32005573 = 9.0;
double r32005574 = r32005572 * r32005573;
double r32005575 = y;
double r32005576 = r32005574 * r32005575;
double r32005577 = z;
double r32005578 = 4.0;
double r32005579 = r32005577 * r32005578;
double r32005580 = t;
double r32005581 = r32005579 * r32005580;
double r32005582 = a;
double r32005583 = r32005581 * r32005582;
double r32005584 = r32005576 - r32005583;
double r32005585 = b;
double r32005586 = r32005584 + r32005585;
double r32005587 = c;
double r32005588 = r32005577 * r32005587;
double r32005589 = r32005586 / r32005588;
return r32005589;
}
double f(double x, double y, double z, double t, double a, double b, double c) {
double r32005590 = z;
double r32005591 = -2.0374603215218364e-79;
bool r32005592 = r32005590 <= r32005591;
double r32005593 = x;
double r32005594 = r32005593 / r32005590;
double r32005595 = y;
double r32005596 = 9.0;
double r32005597 = r32005595 * r32005596;
double r32005598 = b;
double r32005599 = r32005598 / r32005590;
double r32005600 = a;
double r32005601 = 4.0;
double r32005602 = t;
double r32005603 = r32005601 * r32005602;
double r32005604 = r32005600 * r32005603;
double r32005605 = r32005599 - r32005604;
double r32005606 = fma(r32005594, r32005597, r32005605);
double r32005607 = c;
double r32005608 = r32005606 / r32005607;
double r32005609 = 9.378696137572198e-117;
bool r32005610 = r32005590 <= r32005609;
double r32005611 = r32005593 * r32005596;
double r32005612 = r32005595 * r32005611;
double r32005613 = r32005601 * r32005590;
double r32005614 = r32005602 * r32005613;
double r32005615 = r32005614 * r32005600;
double r32005616 = r32005612 - r32005615;
double r32005617 = r32005598 + r32005616;
double r32005618 = r32005590 * r32005607;
double r32005619 = r32005617 / r32005618;
double r32005620 = r32005610 ? r32005619 : r32005608;
double r32005621 = r32005592 ? r32005608 : r32005620;
return r32005621;
}




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.2 |
|---|---|
| Target | 14.2 |
| Herbie | 7.3 |
if z < -2.0374603215218364e-79 or 9.378696137572198e-117 < z Initial program 24.3
Simplified9.6
rmApplied div-inv9.6
Taylor expanded around 0 9.6
Simplified7.2
rmApplied associate-*r/7.1
Simplified7.6
if -2.0374603215218364e-79 < z < 9.378696137572198e-117Initial program 6.4
Final simplification7.3
herbie shell --seed 2019172 +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)))