\frac{x \cdot y - \left(z \cdot 9\right) \cdot t}{a \cdot 2}\begin{array}{l}
\mathbf{if}\;t \le -2883699790592167196212866192506880:\\
\;\;\;\;\mathsf{fma}\left(-4.5, z \cdot \frac{t}{a}, y \cdot \frac{0.5 \cdot x}{a}\right)\\
\mathbf{elif}\;t \le 819283338.3549673557281494140625:\\
\;\;\;\;\frac{x \cdot y + \left(9 \cdot z\right) \cdot \left(-t\right)}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(-4.5, \frac{\frac{\sqrt{t}}{\sqrt[3]{a}}}{\sqrt[3]{a}} \cdot \left(z \cdot \frac{\sqrt{t}}{\sqrt[3]{a}}\right), \frac{0.5}{\frac{a}{x \cdot y}}\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r444071 = x;
double r444072 = y;
double r444073 = r444071 * r444072;
double r444074 = z;
double r444075 = 9.0;
double r444076 = r444074 * r444075;
double r444077 = t;
double r444078 = r444076 * r444077;
double r444079 = r444073 - r444078;
double r444080 = a;
double r444081 = 2.0;
double r444082 = r444080 * r444081;
double r444083 = r444079 / r444082;
return r444083;
}
double f(double x, double y, double z, double t, double a) {
double r444084 = t;
double r444085 = -2.883699790592167e+33;
bool r444086 = r444084 <= r444085;
double r444087 = 4.5;
double r444088 = -r444087;
double r444089 = z;
double r444090 = a;
double r444091 = r444084 / r444090;
double r444092 = r444089 * r444091;
double r444093 = y;
double r444094 = 0.5;
double r444095 = x;
double r444096 = r444094 * r444095;
double r444097 = r444096 / r444090;
double r444098 = r444093 * r444097;
double r444099 = fma(r444088, r444092, r444098);
double r444100 = 819283338.3549674;
bool r444101 = r444084 <= r444100;
double r444102 = r444095 * r444093;
double r444103 = 9.0;
double r444104 = r444103 * r444089;
double r444105 = -r444084;
double r444106 = r444104 * r444105;
double r444107 = r444102 + r444106;
double r444108 = 2.0;
double r444109 = r444108 * r444090;
double r444110 = r444107 / r444109;
double r444111 = sqrt(r444084);
double r444112 = cbrt(r444090);
double r444113 = r444111 / r444112;
double r444114 = r444113 / r444112;
double r444115 = r444089 * r444113;
double r444116 = r444114 * r444115;
double r444117 = r444090 / r444102;
double r444118 = r444094 / r444117;
double r444119 = fma(r444088, r444116, r444118);
double r444120 = r444101 ? r444110 : r444119;
double r444121 = r444086 ? r444099 : r444120;
return r444121;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 8.0 |
|---|---|
| Target | 6.0 |
| Herbie | 5.3 |
if t < -2.883699790592167e+33Initial program 13.8
Simplified13.8
rmApplied fma-udef13.8
Simplified13.8
Taylor expanded around 0 13.6
Simplified9.2
rmApplied associate-/r/9.9
rmApplied *-un-lft-identity9.9
Applied times-frac7.7
Applied *-un-lft-identity7.7
Applied times-frac7.8
Simplified7.8
Simplified7.7
if -2.883699790592167e+33 < t < 819283338.3549674Initial program 4.4
Simplified4.4
rmApplied fma-udef4.4
Simplified4.4
if 819283338.3549674 < t Initial program 12.5
Simplified12.5
rmApplied fma-udef12.5
Simplified12.5
Taylor expanded around 0 12.4
Simplified8.7
rmApplied *-un-lft-identity8.7
Applied add-cube-cbrt9.3
Applied times-frac9.3
Applied add-sqr-sqrt9.4
Applied times-frac6.3
Simplified6.3
Simplified5.2
Final simplification5.3
herbie shell --seed 2019174 +o rules:numerics
(FPCore (x y z t a)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, I"
:herbie-target
(if (< a -2.090464557976709e+86) (- (* 0.5 (/ (* y x) a)) (* 4.5 (/ t (/ a z)))) (if (< a 2.144030707833976e+99) (/ (- (* x y) (* z (* 9.0 t))) (* a 2.0)) (- (* (/ y a) (* x 0.5)) (* (/ t a) (* z 4.5)))))
(/ (- (* x y) (* (* z 9.0) t)) (* a 2.0)))