x \cdot \frac{\frac{y}{z} \cdot t}{t}\begin{array}{l}
\mathbf{if}\;\frac{y}{z} = -\infty:\\
\;\;\;\;y \cdot \frac{x}{z}\\
\mathbf{elif}\;\frac{y}{z} \le -1.777824700739059504027072604237357294271 \cdot 10^{-189}:\\
\;\;\;\;\frac{y}{z} \cdot x\\
\mathbf{elif}\;\frac{y}{z} \le 6.194701076531514820787324531303599279908 \cdot 10^{-141}:\\
\;\;\;\;\frac{{\left(\sqrt[3]{-1}\right)}^{2} \cdot \left(x \cdot y\right)}{z}\\
\mathbf{elif}\;\frac{y}{z} \le 4.487328446405641062208224523193589026226 \cdot 10^{149}:\\
\;\;\;\;\frac{y}{z} \cdot x\\
\mathbf{else}:\\
\;\;\;\;y \cdot \frac{x}{z}\\
\end{array}double f(double x, double y, double z, double t) {
double r430755 = x;
double r430756 = y;
double r430757 = z;
double r430758 = r430756 / r430757;
double r430759 = t;
double r430760 = r430758 * r430759;
double r430761 = r430760 / r430759;
double r430762 = r430755 * r430761;
return r430762;
}
double f(double x, double y, double z, double __attribute__((unused)) t) {
double r430763 = y;
double r430764 = z;
double r430765 = r430763 / r430764;
double r430766 = -inf.0;
bool r430767 = r430765 <= r430766;
double r430768 = x;
double r430769 = r430768 / r430764;
double r430770 = r430763 * r430769;
double r430771 = -1.7778247007390595e-189;
bool r430772 = r430765 <= r430771;
double r430773 = r430765 * r430768;
double r430774 = 6.194701076531515e-141;
bool r430775 = r430765 <= r430774;
double r430776 = -1.0;
double r430777 = cbrt(r430776);
double r430778 = 2.0;
double r430779 = pow(r430777, r430778);
double r430780 = r430768 * r430763;
double r430781 = r430779 * r430780;
double r430782 = r430781 / r430764;
double r430783 = 4.487328446405641e+149;
bool r430784 = r430765 <= r430783;
double r430785 = r430784 ? r430773 : r430770;
double r430786 = r430775 ? r430782 : r430785;
double r430787 = r430772 ? r430773 : r430786;
double r430788 = r430767 ? r430770 : r430787;
return r430788;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 14.7 |
|---|---|
| Target | 1.4 |
| Herbie | 0.8 |
if (/ y z) < -inf.0 or 4.487328446405641e+149 < (/ y z) Initial program 41.5
Simplified29.8
rmApplied div-inv29.9
Applied associate-*l*1.9
Simplified1.8
if -inf.0 < (/ y z) < -1.7778247007390595e-189 or 6.194701076531515e-141 < (/ y z) < 4.487328446405641e+149Initial program 7.9
Simplified0.2
if -1.7778247007390595e-189 < (/ y z) < 6.194701076531515e-141Initial program 17.3
Simplified9.0
rmApplied add-cube-cbrt9.5
Applied associate-*l*9.5
rmApplied div-inv9.4
Applied cbrt-prod9.4
Taylor expanded around -inf 1.3
Final simplification0.8
herbie shell --seed 2019325
(FPCore (x y z t)
:name "Graphics.Rendering.Chart.Backend.Diagrams:calcFontMetrics from Chart-diagrams-1.5.1, B"
:precision binary64
:herbie-target
(if (< (/ (* (/ y z) t) t) -1.20672205123045e+245) (/ y (/ z x)) (if (< (/ (* (/ y z) t) t) -5.907522236933906e-275) (* x (/ y z)) (if (< (/ (* (/ y z) t) t) 5.658954423153415e-65) (/ y (/ z x)) (if (< (/ (* (/ y z) t) t) 2.0087180502407133e+217) (* x (/ y z)) (/ (* y x) z)))))
(* x (/ (* (/ y z) t) t)))