x \cdot \frac{\frac{y}{z} \cdot t}{t}\begin{array}{l}
\mathbf{if}\;\frac{y}{z} \le 6.572772375852078491850975400123842729186 \cdot 10^{50}:\\
\;\;\;\;\frac{\sqrt[3]{x} \cdot \sqrt[3]{x}}{\sqrt[3]{z}} \cdot \left(\frac{\sqrt[3]{x}}{\sqrt[3]{z}} \cdot \frac{y}{\sqrt[3]{\sqrt[3]{z} \cdot \sqrt[3]{z}} \cdot \sqrt[3]{\sqrt[3]{z}}}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\end{array}double f(double x, double y, double z, double t) {
double r527606 = x;
double r527607 = y;
double r527608 = z;
double r527609 = r527607 / r527608;
double r527610 = t;
double r527611 = r527609 * r527610;
double r527612 = r527611 / r527610;
double r527613 = r527606 * r527612;
return r527613;
}
double f(double x, double y, double z, double __attribute__((unused)) t) {
double r527614 = y;
double r527615 = z;
double r527616 = r527614 / r527615;
double r527617 = 6.5727723758520785e+50;
bool r527618 = r527616 <= r527617;
double r527619 = x;
double r527620 = cbrt(r527619);
double r527621 = r527620 * r527620;
double r527622 = cbrt(r527615);
double r527623 = r527621 / r527622;
double r527624 = r527620 / r527622;
double r527625 = r527622 * r527622;
double r527626 = cbrt(r527625);
double r527627 = cbrt(r527622);
double r527628 = r527626 * r527627;
double r527629 = r527614 / r527628;
double r527630 = r527624 * r527629;
double r527631 = r527623 * r527630;
double r527632 = r527619 * r527614;
double r527633 = r527632 / r527615;
double r527634 = r527618 ? r527631 : r527633;
return r527634;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 15.2 |
|---|---|
| Target | 1.7 |
| Herbie | 3.1 |
if (/ y z) < 6.5727723758520785e+50Initial program 13.5
Simplified5.7
rmApplied add-cube-cbrt6.5
Applied *-un-lft-identity6.5
Applied times-frac6.5
Applied associate-*r*5.8
Simplified5.8
rmApplied add-cube-cbrt5.8
Applied cbrt-prod5.9
rmApplied add-cube-cbrt6.0
Applied times-frac6.0
Applied associate-*l*2.6
if 6.5727723758520785e+50 < (/ y z) Initial program 24.7
Simplified11.0
rmApplied associate-*r/5.9
Final simplification3.1
herbie shell --seed 2020001 +o rules:numerics
(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)))