x \cdot \frac{\frac{y}{z} \cdot t}{t}\begin{array}{l}
\mathbf{if}\;\frac{y}{z} \le -5.422773879432081316361824486038416445882 \cdot 10^{151}:\\
\;\;\;\;\frac{1}{\frac{z}{y \cdot x}}\\
\mathbf{elif}\;\frac{y}{z} \le -4.526201326686900451200991798578555798024 \cdot 10^{-297}:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\sqrt[3]{z}} \cdot \left(\left(\frac{\sqrt[3]{x}}{\sqrt[3]{\sqrt[3]{z}}} \cdot \frac{y}{\sqrt[3]{z}}\right) \cdot \frac{\sqrt[3]{x} \cdot \sqrt[3]{x}}{\sqrt[3]{\sqrt[3]{z} \cdot \sqrt[3]{z}}}\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r26630653 = x;
double r26630654 = y;
double r26630655 = z;
double r26630656 = r26630654 / r26630655;
double r26630657 = t;
double r26630658 = r26630656 * r26630657;
double r26630659 = r26630658 / r26630657;
double r26630660 = r26630653 * r26630659;
return r26630660;
}
double f(double x, double y, double z, double __attribute__((unused)) t) {
double r26630661 = y;
double r26630662 = z;
double r26630663 = r26630661 / r26630662;
double r26630664 = -5.422773879432081e+151;
bool r26630665 = r26630663 <= r26630664;
double r26630666 = 1.0;
double r26630667 = x;
double r26630668 = r26630661 * r26630667;
double r26630669 = r26630662 / r26630668;
double r26630670 = r26630666 / r26630669;
double r26630671 = -4.5262013266869005e-297;
bool r26630672 = r26630663 <= r26630671;
double r26630673 = r26630667 * r26630663;
double r26630674 = cbrt(r26630662);
double r26630675 = r26630666 / r26630674;
double r26630676 = cbrt(r26630667);
double r26630677 = cbrt(r26630674);
double r26630678 = r26630676 / r26630677;
double r26630679 = r26630661 / r26630674;
double r26630680 = r26630678 * r26630679;
double r26630681 = r26630676 * r26630676;
double r26630682 = r26630674 * r26630674;
double r26630683 = cbrt(r26630682);
double r26630684 = r26630681 / r26630683;
double r26630685 = r26630680 * r26630684;
double r26630686 = r26630675 * r26630685;
double r26630687 = r26630672 ? r26630673 : r26630686;
double r26630688 = r26630665 ? r26630670 : r26630687;
return r26630688;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 14.8 |
|---|---|
| Target | 1.6 |
| Herbie | 2.5 |
if (/ y z) < -5.422773879432081e+151Initial program 36.5
Simplified2.3
rmApplied clear-num2.4
if -5.422773879432081e+151 < (/ y z) < -4.5262013266869005e-297Initial program 8.2
Simplified9.0
rmApplied *-un-lft-identity9.0
Applied times-frac0.2
Simplified0.2
if -4.5262013266869005e-297 < (/ y z) Initial program 15.4
Simplified5.4
rmApplied div-inv5.4
rmApplied add-cube-cbrt6.1
Applied *-un-lft-identity6.1
Applied times-frac6.1
Applied associate-*r*6.1
Simplified4.6
rmApplied add-cube-cbrt4.6
Applied cbrt-prod4.7
Applied add-cube-cbrt4.8
Applied times-frac4.8
Applied associate-*l*3.8
Final simplification2.5
herbie shell --seed 2019192
(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)))