x \cdot \frac{\frac{y}{z} \cdot t}{t}\begin{array}{l}
\mathbf{if}\;t \le -9.926373121714999364733704764752531243436 \cdot 10^{-253}:\\
\;\;\;\;\frac{y}{\frac{z}{x}}\\
\mathbf{elif}\;t \le 602927915546591127029321564160:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\mathbf{else}:\\
\;\;\;\;\frac{y \cdot x}{z}\\
\end{array}double f(double x, double y, double z, double t) {
double r353285 = x;
double r353286 = y;
double r353287 = z;
double r353288 = r353286 / r353287;
double r353289 = t;
double r353290 = r353288 * r353289;
double r353291 = r353290 / r353289;
double r353292 = r353285 * r353291;
return r353292;
}
double f(double x, double y, double z, double t) {
double r353293 = t;
double r353294 = -9.926373121714999e-253;
bool r353295 = r353293 <= r353294;
double r353296 = y;
double r353297 = z;
double r353298 = x;
double r353299 = r353297 / r353298;
double r353300 = r353296 / r353299;
double r353301 = 6.029279155465911e+29;
bool r353302 = r353293 <= r353301;
double r353303 = r353297 / r353296;
double r353304 = r353298 / r353303;
double r353305 = r353296 * r353298;
double r353306 = r353305 / r353297;
double r353307 = r353302 ? r353304 : r353306;
double r353308 = r353295 ? r353300 : r353307;
return r353308;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 14.6 |
|---|---|
| Target | 1.5 |
| Herbie | 5.7 |
if t < -9.926373121714999e-253Initial program 13.5
Simplified6.4
rmApplied associate-/l*5.8
if -9.926373121714999e-253 < t < 6.029279155465911e+29Initial program 15.6
Simplified6.0
rmApplied div-inv6.1
rmApplied pow16.1
Applied pow16.1
Applied pow16.1
Applied pow-prod-down6.1
Applied pow-prod-down6.1
Simplified5.8
if 6.029279155465911e+29 < t Initial program 15.4
Simplified5.3
rmApplied div-inv5.3
rmApplied un-div-inv5.3
Final simplification5.7
herbie shell --seed 2019212 +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.20672205123045005e245) (/ y (/ z x)) (if (< (/ (* (/ y z) t) t) -5.90752223693390633e-275) (* x (/ y z)) (if (< (/ (* (/ y z) t) t) 5.65895442315341522e-65) (/ y (/ z x)) (if (< (/ (* (/ y z) t) t) 2.0087180502407133e217) (* x (/ y z)) (/ (* y x) z)))))
(* x (/ (* (/ y z) t) t)))