\left(x \cdot 2 - \left(\left(y \cdot 9\right) \cdot z\right) \cdot t\right) + \left(a \cdot 27\right) \cdot b
\begin{array}{l}
\mathbf{if}\;\left(y \cdot 9\right) \cdot z = -\infty \lor \neg \left(\left(y \cdot 9\right) \cdot z \le 3.3648771430372573 \cdot 10^{183}\right):\\
\;\;\;\;\left(x \cdot 2 - \left(y \cdot 9\right) \cdot \left(z \cdot t\right)\right) + a \cdot \left(27 \cdot b\right)\\
\mathbf{else}:\\
\;\;\;\;\left(x \cdot 2 - \left(\left(y \cdot 9\right) \cdot z\right) \cdot t\right) + 27 \cdot \left(a \cdot b\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r880626 = x;
double r880627 = 2.0;
double r880628 = r880626 * r880627;
double r880629 = y;
double r880630 = 9.0;
double r880631 = r880629 * r880630;
double r880632 = z;
double r880633 = r880631 * r880632;
double r880634 = t;
double r880635 = r880633 * r880634;
double r880636 = r880628 - r880635;
double r880637 = a;
double r880638 = 27.0;
double r880639 = r880637 * r880638;
double r880640 = b;
double r880641 = r880639 * r880640;
double r880642 = r880636 + r880641;
return r880642;
}
double f(double x, double y, double z, double t, double a, double b) {
double r880643 = y;
double r880644 = 9.0;
double r880645 = r880643 * r880644;
double r880646 = z;
double r880647 = r880645 * r880646;
double r880648 = -inf.0;
bool r880649 = r880647 <= r880648;
double r880650 = 3.3648771430372573e+183;
bool r880651 = r880647 <= r880650;
double r880652 = !r880651;
bool r880653 = r880649 || r880652;
double r880654 = x;
double r880655 = 2.0;
double r880656 = r880654 * r880655;
double r880657 = t;
double r880658 = r880646 * r880657;
double r880659 = r880645 * r880658;
double r880660 = r880656 - r880659;
double r880661 = a;
double r880662 = 27.0;
double r880663 = b;
double r880664 = r880662 * r880663;
double r880665 = r880661 * r880664;
double r880666 = r880660 + r880665;
double r880667 = r880647 * r880657;
double r880668 = r880656 - r880667;
double r880669 = r880661 * r880663;
double r880670 = r880662 * r880669;
double r880671 = r880668 + r880670;
double r880672 = r880653 ? r880666 : r880671;
return r880672;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
Results
| Original | 3.7 |
|---|---|
| Target | 2.6 |
| Herbie | 0.5 |
if (* (* y 9.0) z) < -inf.0 or 3.3648771430372573e+183 < (* (* y 9.0) z) Initial program 34.2
rmApplied associate-*l*1.3
rmApplied associate-*l*1.4
if -inf.0 < (* (* y 9.0) z) < 3.3648771430372573e+183Initial program 0.4
rmApplied associate-*l*4.0
rmApplied associate-*l*4.1
Taylor expanded around 0 4.0
rmApplied associate-*r*0.4
Final simplification0.5
herbie shell --seed 2020043 +o rules:numerics
(FPCore (x y z t a b)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, A"
:precision binary64
:herbie-target
(if (< y 7.590524218811189e-161) (+ (- (* x 2) (* (* (* y 9) z) t)) (* a (* 27 b))) (+ (- (* x 2) (* 9 (* y (* t z)))) (* (* a 27) b)))
(+ (- (* x 2) (* (* (* y 9) z) t)) (* (* a 27) b)))