x \cdot \frac{\frac{y}{z} \cdot t}{t}\begin{array}{l}
\mathbf{if}\;\frac{y}{z} \le -2.89968713120227716200243957970138180903 \cdot 10^{210}:\\
\;\;\;\;\frac{1}{\frac{\frac{z}{x}}{y}}\\
\mathbf{elif}\;\frac{y}{z} \le -2.674553152877029983261934607928478862346 \cdot 10^{-163}:\\
\;\;\;\;\frac{y}{z} \cdot x\\
\mathbf{elif}\;\frac{y}{z} \le -0.0:\\
\;\;\;\;\frac{y \cdot x}{z}\\
\mathbf{elif}\;\frac{y}{z} \le 1.288243228157504650577480569870560524088 \cdot 10^{170}:\\
\;\;\;\;\frac{\frac{y}{z}}{\frac{1}{x}}\\
\mathbf{else}:\\
\;\;\;\;y \cdot \frac{x}{z}\\
\end{array}double f(double x, double y, double z, double t) {
double r411473 = x;
double r411474 = y;
double r411475 = z;
double r411476 = r411474 / r411475;
double r411477 = t;
double r411478 = r411476 * r411477;
double r411479 = r411478 / r411477;
double r411480 = r411473 * r411479;
return r411480;
}
double f(double x, double y, double z, double __attribute__((unused)) t) {
double r411481 = y;
double r411482 = z;
double r411483 = r411481 / r411482;
double r411484 = -2.899687131202277e+210;
bool r411485 = r411483 <= r411484;
double r411486 = 1.0;
double r411487 = x;
double r411488 = r411482 / r411487;
double r411489 = r411488 / r411481;
double r411490 = r411486 / r411489;
double r411491 = -2.67455315287703e-163;
bool r411492 = r411483 <= r411491;
double r411493 = r411483 * r411487;
double r411494 = -0.0;
bool r411495 = r411483 <= r411494;
double r411496 = r411481 * r411487;
double r411497 = r411496 / r411482;
double r411498 = 1.2882432281575047e+170;
bool r411499 = r411483 <= r411498;
double r411500 = r411486 / r411487;
double r411501 = r411483 / r411500;
double r411502 = r411487 / r411482;
double r411503 = r411481 * r411502;
double r411504 = r411499 ? r411501 : r411503;
double r411505 = r411495 ? r411497 : r411504;
double r411506 = r411492 ? r411493 : r411505;
double r411507 = r411485 ? r411490 : r411506;
return r411507;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 14.2 |
|---|---|
| Target | 1.5 |
| Herbie | 0.6 |
if (/ y z) < -2.899687131202277e+210Initial program 42.0
Simplified0.7
rmApplied associate-/l*1.1
rmApplied clear-num1.2
if -2.899687131202277e+210 < (/ y z) < -2.67455315287703e-163Initial program 7.5
Simplified10.1
rmApplied associate-/l*10.1
rmApplied associate-/r/0.2
if -2.67455315287703e-163 < (/ y z) < -0.0Initial program 16.9
Simplified0.8
if -0.0 < (/ y z) < 1.2882432281575047e+170Initial program 10.2
Simplified7.5
rmApplied associate-/l*6.7
rmApplied div-inv6.7
Applied associate-/r*3.5
if 1.2882432281575047e+170 < (/ y z) Initial program 37.2
Simplified2.2
rmApplied *-un-lft-identity2.2
Applied times-frac1.8
Simplified1.8
Final simplification0.6
herbie shell --seed 2019209
(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)))