\frac{x \cdot y - \left(z \cdot 9\right) \cdot t}{a \cdot 2}\begin{array}{l}
\mathbf{if}\;x \cdot y \leq -4.774026145451886 \cdot 10^{+109}:\\
\;\;\;\;0.5 \cdot \frac{x}{\frac{a}{y}} - 4.5 \cdot \frac{z \cdot t}{a}\\
\mathbf{elif}\;x \cdot y \leq -0:\\
\;\;\;\;\left(x \cdot y - t \cdot \left(z \cdot 9\right)\right) \cdot \frac{0.5}{a}\\
\mathbf{elif}\;x \cdot y \leq 1.002744172180215 \cdot 10^{-61}:\\
\;\;\;\;0.5 \cdot \frac{x \cdot y}{a} - 4.5 \cdot \left(z \cdot \frac{t}{a}\right)\\
\mathbf{elif}\;x \cdot y \leq 1.514157687347536 \cdot 10^{+179}:\\
\;\;\;\;\frac{x \cdot y}{a \cdot 2} - t \cdot \left(4.5 \cdot \frac{z}{a}\right)\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \frac{x}{\frac{a}{y}} - 4.5 \cdot \frac{z \cdot t}{a}\\
\end{array}(FPCore (x y z t a) :precision binary64 (/ (- (* x y) (* (* z 9.0) t)) (* a 2.0)))
(FPCore (x y z t a)
:precision binary64
(if (<= (* x y) -4.774026145451886e+109)
(- (* 0.5 (/ x (/ a y))) (* 4.5 (/ (* z t) a)))
(if (<= (* x y) -0.0)
(* (- (* x y) (* t (* z 9.0))) (/ 0.5 a))
(if (<= (* x y) 1.002744172180215e-61)
(- (* 0.5 (/ (* x y) a)) (* 4.5 (* z (/ t a))))
(if (<= (* x y) 1.514157687347536e+179)
(- (/ (* x y) (* a 2.0)) (* t (* 4.5 (/ z a))))
(- (* 0.5 (/ x (/ a y))) (* 4.5 (/ (* z t) a))))))))double code(double x, double y, double z, double t, double a) {
return ((x * y) - ((z * 9.0) * t)) / (a * 2.0);
}
double code(double x, double y, double z, double t, double a) {
double tmp;
if ((x * y) <= -4.774026145451886e+109) {
tmp = (0.5 * (x / (a / y))) - (4.5 * ((z * t) / a));
} else if ((x * y) <= -0.0) {
tmp = ((x * y) - (t * (z * 9.0))) * (0.5 / a);
} else if ((x * y) <= 1.002744172180215e-61) {
tmp = (0.5 * ((x * y) / a)) - (4.5 * (z * (t / a)));
} else if ((x * y) <= 1.514157687347536e+179) {
tmp = ((x * y) / (a * 2.0)) - (t * (4.5 * (z / a)));
} else {
tmp = (0.5 * (x / (a / y))) - (4.5 * ((z * t) / a));
}
return tmp;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 7.6 |
|---|---|
| Target | 5.5 |
| Herbie | 5.2 |
if (*.f64 x y) < -4.77402614545188629e109 or 1.5141576873475359e179 < (*.f64 x y) Initial program 22.7
rmApplied clear-num_binary6422.8
Simplified22.8
Taylor expanded around inf 22.7
Simplified22.7
rmApplied associate-/l*_binary648.2
if -4.77402614545188629e109 < (*.f64 x y) < -0.0Initial program 4.0
rmApplied div-inv_binary644.1
Simplified4.1
if -0.0 < (*.f64 x y) < 1.00274417218021508e-61Initial program 3.5
rmApplied clear-num_binary643.9
Simplified3.9
Taylor expanded around inf 3.5
Simplified3.5
rmApplied *-un-lft-identity_binary643.5
Applied times-frac_binary646.2
Simplified6.2
if 1.00274417218021508e-61 < (*.f64 x y) < 1.5141576873475359e179Initial program 3.4
rmApplied div-sub_binary643.4
Simplified3.4
Final simplification5.2
herbie shell --seed 2020220
(FPCore (x y z t a)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, I"
:precision binary64
: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)))