\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{\frac{\sqrt[3]{b} \cdot \sqrt[3]{b}}{\sqrt[3]{z} \cdot \sqrt[3]{z}}}{\frac{c}{\sqrt[3]{b}} \cdot \sqrt[3]{z}} + \left(\left(\frac{9}{c} \cdot \frac{x}{z}\right) \cdot y - \frac{t}{\frac{c}{a}} \cdot 4\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 0.0:\\
\;\;\;\;\left(\frac{\frac{x}{\frac{c}{y \cdot 9}}}{z} - \frac{t}{\frac{c}{a}} \cdot 4\right) + \frac{\frac{b}{z}}{c}\\
\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}:\\
\;\;\;\;\frac{\frac{\sqrt[3]{b} \cdot \sqrt[3]{b}}{\sqrt[3]{z} \cdot \sqrt[3]{z}}}{\frac{c}{\sqrt[3]{b}} \cdot \sqrt[3]{z}} + \left(\left(\frac{9}{c} \cdot \frac{x}{z}\right) \cdot y - \frac{t}{\frac{c}{a}} \cdot 4\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c) {
double r456441 = x;
double r456442 = 9.0;
double r456443 = r456441 * r456442;
double r456444 = y;
double r456445 = r456443 * r456444;
double r456446 = z;
double r456447 = 4.0;
double r456448 = r456446 * r456447;
double r456449 = t;
double r456450 = r456448 * r456449;
double r456451 = a;
double r456452 = r456450 * r456451;
double r456453 = r456445 - r456452;
double r456454 = b;
double r456455 = r456453 + r456454;
double r456456 = c;
double r456457 = r456446 * r456456;
double r456458 = r456455 / r456457;
return r456458;
}
double f(double x, double y, double z, double t, double a, double b, double c) {
double r456459 = x;
double r456460 = 9.0;
double r456461 = r456459 * r456460;
double r456462 = y;
double r456463 = r456461 * r456462;
double r456464 = z;
double r456465 = 4.0;
double r456466 = r456464 * r456465;
double r456467 = t;
double r456468 = r456466 * r456467;
double r456469 = a;
double r456470 = r456468 * r456469;
double r456471 = r456463 - r456470;
double r456472 = b;
double r456473 = r456471 + r456472;
double r456474 = c;
double r456475 = r456474 * r456464;
double r456476 = r456473 / r456475;
double r456477 = -inf.0;
bool r456478 = r456476 <= r456477;
double r456479 = cbrt(r456472);
double r456480 = r456479 * r456479;
double r456481 = cbrt(r456464);
double r456482 = r456481 * r456481;
double r456483 = r456480 / r456482;
double r456484 = r456474 / r456479;
double r456485 = r456484 * r456481;
double r456486 = r456483 / r456485;
double r456487 = r456460 / r456474;
double r456488 = r456459 / r456464;
double r456489 = r456487 * r456488;
double r456490 = r456489 * r456462;
double r456491 = r456474 / r456469;
double r456492 = r456467 / r456491;
double r456493 = r456492 * r456465;
double r456494 = r456490 - r456493;
double r456495 = r456486 + r456494;
double r456496 = -1.1436569669021386e-208;
bool r456497 = r456476 <= r456496;
double r456498 = 0.0;
bool r456499 = r456476 <= r456498;
double r456500 = r456462 * r456460;
double r456501 = r456474 / r456500;
double r456502 = r456459 / r456501;
double r456503 = r456502 / r456464;
double r456504 = r456503 - r456493;
double r456505 = r456472 / r456464;
double r456506 = r456505 / r456474;
double r456507 = r456504 + r456506;
double r456508 = 1.6465263075859285e+294;
bool r456509 = r456476 <= r456508;
double r456510 = r456509 ? r456476 : r456495;
double r456511 = r456499 ? r456507 : r456510;
double r456512 = r456497 ? r456476 : r456511;
double r456513 = r456478 ? r456495 : r456512;
return r456513;
}




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.3 |
|---|---|
| Target | 14.3 |
| Herbie | 3.1 |
if (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < -inf.0 or 1.6465263075859285e+294 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) Initial program 61.8
Simplified26.9
Taylor expanded around 0 30.6
Simplified17.8
rmApplied associate-/l*13.4
rmApplied add-cube-cbrt13.5
Applied add-cube-cbrt13.5
Applied times-frac13.5
Applied associate-/l*12.8
Simplified13.0
rmApplied pow113.0
Applied pow113.0
Applied pow113.0
Applied pow-prod-down13.0
Applied pow-prod-down13.0
Simplified9.2
if -inf.0 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < -1.1436569669021386e-208 or 0.0 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < 1.6465263075859285e+294Initial program 3.5
if -1.1436569669021386e-208 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < 0.0Initial program 30.3
Simplified0.3
Taylor expanded around 0 19.5
Simplified1.5
rmApplied associate-/l*3.4
rmApplied pow13.4
Applied pow13.4
Applied pow13.4
Applied pow-prod-down3.4
Applied pow-prod-down3.4
Simplified4.4
Final simplification3.1
herbie shell --seed 2019196
(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)))