\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} = -\infty:\\
\;\;\;\;\left(\frac{b}{c \cdot z} + \frac{x}{\frac{c \cdot z}{y}} \cdot 9.0\right) - 4.0 \cdot \left(t \cdot \frac{a}{c}\right)\\
\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.5906234503561492 \cdot 10^{-156}:\\
\;\;\;\;\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}\\
\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 5.0596648813598755 \cdot 10^{+87}:\\
\;\;\;\;\frac{\mathsf{fma}\left(9.0, \frac{y \cdot x}{z}, \frac{b}{z}\right) - 4.0 \cdot \left(t \cdot a\right)}{c}\\
\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 7.263326730960966 \cdot 10^{+307}:\\
\;\;\;\;\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}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{b}{c \cdot z} + 9.0 \cdot \frac{x}{\frac{c}{\sqrt[3]{y}} \cdot \frac{z}{\sqrt[3]{y} \cdot \sqrt[3]{y}}}\right) - \frac{t}{\frac{c}{a}} \cdot 4.0\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c) {
double r24100400 = x;
double r24100401 = 9.0;
double r24100402 = r24100400 * r24100401;
double r24100403 = y;
double r24100404 = r24100402 * r24100403;
double r24100405 = z;
double r24100406 = 4.0;
double r24100407 = r24100405 * r24100406;
double r24100408 = t;
double r24100409 = r24100407 * r24100408;
double r24100410 = a;
double r24100411 = r24100409 * r24100410;
double r24100412 = r24100404 - r24100411;
double r24100413 = b;
double r24100414 = r24100412 + r24100413;
double r24100415 = c;
double r24100416 = r24100405 * r24100415;
double r24100417 = r24100414 / r24100416;
return r24100417;
}
double f(double x, double y, double z, double t, double a, double b, double c) {
double r24100418 = x;
double r24100419 = 9.0;
double r24100420 = r24100418 * r24100419;
double r24100421 = y;
double r24100422 = r24100420 * r24100421;
double r24100423 = z;
double r24100424 = 4.0;
double r24100425 = r24100423 * r24100424;
double r24100426 = t;
double r24100427 = r24100425 * r24100426;
double r24100428 = a;
double r24100429 = r24100427 * r24100428;
double r24100430 = r24100422 - r24100429;
double r24100431 = b;
double r24100432 = r24100430 + r24100431;
double r24100433 = c;
double r24100434 = r24100433 * r24100423;
double r24100435 = r24100432 / r24100434;
double r24100436 = -inf.0;
bool r24100437 = r24100435 <= r24100436;
double r24100438 = r24100431 / r24100434;
double r24100439 = r24100434 / r24100421;
double r24100440 = r24100418 / r24100439;
double r24100441 = r24100440 * r24100419;
double r24100442 = r24100438 + r24100441;
double r24100443 = r24100428 / r24100433;
double r24100444 = r24100426 * r24100443;
double r24100445 = r24100424 * r24100444;
double r24100446 = r24100442 - r24100445;
double r24100447 = -1.5906234503561492e-156;
bool r24100448 = r24100435 <= r24100447;
double r24100449 = 5.0596648813598755e+87;
bool r24100450 = r24100435 <= r24100449;
double r24100451 = r24100421 * r24100418;
double r24100452 = r24100451 / r24100423;
double r24100453 = r24100431 / r24100423;
double r24100454 = fma(r24100419, r24100452, r24100453);
double r24100455 = r24100426 * r24100428;
double r24100456 = r24100424 * r24100455;
double r24100457 = r24100454 - r24100456;
double r24100458 = r24100457 / r24100433;
double r24100459 = 7.263326730960966e+307;
bool r24100460 = r24100435 <= r24100459;
double r24100461 = cbrt(r24100421);
double r24100462 = r24100433 / r24100461;
double r24100463 = r24100461 * r24100461;
double r24100464 = r24100423 / r24100463;
double r24100465 = r24100462 * r24100464;
double r24100466 = r24100418 / r24100465;
double r24100467 = r24100419 * r24100466;
double r24100468 = r24100438 + r24100467;
double r24100469 = r24100433 / r24100428;
double r24100470 = r24100426 / r24100469;
double r24100471 = r24100470 * r24100424;
double r24100472 = r24100468 - r24100471;
double r24100473 = r24100460 ? r24100435 : r24100472;
double r24100474 = r24100450 ? r24100458 : r24100473;
double r24100475 = r24100448 ? r24100435 : r24100474;
double r24100476 = r24100437 ? r24100446 : r24100475;
return r24100476;
}




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 | 3.1 |
if (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < -inf.0Initial program 60.2
Simplified21.9
Taylor expanded around 0 26.2
rmApplied associate-/l*13.0
rmApplied *-un-lft-identity13.0
Applied times-frac6.0
Simplified6.0
if -inf.0 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < -1.5906234503561492e-156 or 5.0596648813598755e+87 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < 7.263326730960966e+307Initial program 0.6
if -1.5906234503561492e-156 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < 5.0596648813598755e+87Initial program 13.7
Simplified2.2
Taylor expanded around 0 2.1
Simplified2.1
if 7.263326730960966e+307 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) Initial program 61.5
Simplified26.7
Taylor expanded around 0 30.4
rmApplied associate-/l*21.8
rmApplied associate-/l*14.9
rmApplied add-cube-cbrt15.0
Applied times-frac10.0
Final simplification3.1
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)))