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.418027389015775738156568367664862717017 \cdot 10^{-287}:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\mathbf{else}:\\
\;\;\;\;\frac{y}{\frac{\sqrt[3]{z}}{\sqrt[3]{x}} \cdot \frac{\sqrt[3]{z}}{\sqrt[3]{x}}} \cdot \frac{\sqrt[3]{x}}{\sqrt[3]{z}}\\
\end{array}double f(double x, double y, double z, double t) {
double r21740838 = x;
double r21740839 = y;
double r21740840 = z;
double r21740841 = r21740839 / r21740840;
double r21740842 = t;
double r21740843 = r21740841 * r21740842;
double r21740844 = r21740843 / r21740842;
double r21740845 = r21740838 * r21740844;
return r21740845;
}
double f(double x, double y, double z, double __attribute__((unused)) t) {
double r21740846 = y;
double r21740847 = z;
double r21740848 = r21740846 / r21740847;
double r21740849 = -inf.0;
bool r21740850 = r21740848 <= r21740849;
double r21740851 = x;
double r21740852 = r21740851 / r21740847;
double r21740853 = r21740846 * r21740852;
double r21740854 = -1.4180273890157757e-287;
bool r21740855 = r21740848 <= r21740854;
double r21740856 = r21740847 / r21740846;
double r21740857 = r21740851 / r21740856;
double r21740858 = cbrt(r21740847);
double r21740859 = cbrt(r21740851);
double r21740860 = r21740858 / r21740859;
double r21740861 = r21740860 * r21740860;
double r21740862 = r21740846 / r21740861;
double r21740863 = r21740859 / r21740858;
double r21740864 = r21740862 * r21740863;
double r21740865 = r21740855 ? r21740857 : r21740864;
double r21740866 = r21740850 ? r21740853 : r21740865;
return r21740866;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 15.1 |
|---|---|
| Target | 1.4 |
| Herbie | 1.2 |
if (/ y z) < -inf.0Initial program 64.0
Simplified0.3
if -inf.0 < (/ y z) < -1.4180273890157757e-287Initial program 10.4
Simplified7.8
rmApplied add-cube-cbrt8.6
Applied *-un-lft-identity8.6
Applied times-frac8.7
Applied associate-*r*2.7
Simplified2.7
rmApplied *-un-lft-identity2.7
Applied cbrt-prod2.7
Applied *-un-lft-identity2.7
Applied times-frac2.7
Applied associate-*r*2.7
Simplified2.7
rmApplied *-un-lft-identity2.7
Applied associate-*l*2.7
Simplified0.2
if -1.4180273890157757e-287 < (/ y z) Initial program 16.1
Simplified5.0
rmApplied add-cube-cbrt5.7
Applied *-un-lft-identity5.7
Applied times-frac5.7
Applied associate-*r*6.0
Simplified6.0
rmApplied *-un-lft-identity6.0
Applied cbrt-prod6.0
Applied *-un-lft-identity6.0
Applied times-frac6.0
Applied associate-*r*6.0
Simplified6.0
rmApplied *-un-lft-identity6.0
Applied cbrt-prod6.0
Applied add-cube-cbrt6.1
Applied times-frac6.1
Applied associate-*r*5.2
Simplified1.8
Final simplification1.2
herbie shell --seed 2019170 +o rules:numerics
(FPCore (x y z t)
:name "Graphics.Rendering.Chart.Backend.Diagrams:calcFontMetrics from Chart-diagrams-1.5.1, B"
: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)))