x \cdot \frac{\frac{y}{z} \cdot t}{t}\begin{array}{l}
\mathbf{if}\;\frac{y}{z} \le -3.636613989781371082537060282645406790623 \cdot 10^{235}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{elif}\;\frac{y}{z} \le -4.268869399178432590236189660705002059275 \cdot 10^{-310}:\\
\;\;\;\;\frac{y}{z} \cdot x\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\sqrt[3]{y} \cdot \frac{\frac{x}{\sqrt[3]{z}}}{\sqrt[3]{z}}\right) \cdot \sqrt[3]{y}\right) \cdot \frac{\sqrt[3]{y}}{\sqrt[3]{z}}\\
\end{array}double f(double x, double y, double z, double t) {
double r25709288 = x;
double r25709289 = y;
double r25709290 = z;
double r25709291 = r25709289 / r25709290;
double r25709292 = t;
double r25709293 = r25709291 * r25709292;
double r25709294 = r25709293 / r25709292;
double r25709295 = r25709288 * r25709294;
return r25709295;
}
double f(double x, double y, double z, double __attribute__((unused)) t) {
double r25709296 = y;
double r25709297 = z;
double r25709298 = r25709296 / r25709297;
double r25709299 = -3.636613989781371e+235;
bool r25709300 = r25709298 <= r25709299;
double r25709301 = x;
double r25709302 = r25709301 * r25709296;
double r25709303 = r25709302 / r25709297;
double r25709304 = -4.26886939917843e-310;
bool r25709305 = r25709298 <= r25709304;
double r25709306 = r25709298 * r25709301;
double r25709307 = cbrt(r25709296);
double r25709308 = cbrt(r25709297);
double r25709309 = r25709301 / r25709308;
double r25709310 = r25709309 / r25709308;
double r25709311 = r25709307 * r25709310;
double r25709312 = r25709311 * r25709307;
double r25709313 = r25709307 / r25709308;
double r25709314 = r25709312 * r25709313;
double r25709315 = r25709305 ? r25709306 : r25709314;
double r25709316 = r25709300 ? r25709303 : r25709315;
return r25709316;
}




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.4 |
if (/ y z) < -3.636613989781371e+235Initial program 48.0
Simplified0.4
if -3.636613989781371e+235 < (/ y z) < -4.26886939917843e-310Initial program 9.6
Simplified8.0
rmApplied *-un-lft-identity8.0
Applied times-frac0.2
Simplified0.2
if -4.26886939917843e-310 < (/ y z) Initial program 15.5
Simplified5.5
rmApplied add-cube-cbrt6.2
Applied times-frac5.2
rmApplied *-un-lft-identity5.2
Applied cbrt-prod5.2
Applied add-cube-cbrt5.4
Applied times-frac5.4
Applied associate-*r*4.0
Simplified4.0
Final simplification2.4
herbie shell --seed 2019172 +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)))