x \cdot \frac{\frac{y}{z} \cdot t}{t}\begin{array}{l}
\mathbf{if}\;\frac{y}{z} \le -4.6183489977482823 \cdot 10^{236}:\\
\;\;\;\;\left(x \cdot y\right) \cdot \frac{1}{z}\\
\mathbf{elif}\;\frac{y}{z} \le -6.8792362608384231 \cdot 10^{-264}:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\mathbf{elif}\;\frac{y}{z} \le 1.06689610291439 \cdot 10^{-310}:\\
\;\;\;\;\frac{1}{\frac{z}{x \cdot y}}\\
\mathbf{elif}\;\frac{y}{z} \le 8.69850988828769301 \cdot 10^{221}:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{\frac{z}{x}}{y}}\\
\end{array}double f(double x, double y, double z, double t) {
double r598516 = x;
double r598517 = y;
double r598518 = z;
double r598519 = r598517 / r598518;
double r598520 = t;
double r598521 = r598519 * r598520;
double r598522 = r598521 / r598520;
double r598523 = r598516 * r598522;
return r598523;
}
double f(double x, double y, double z, double __attribute__((unused)) t) {
double r598524 = y;
double r598525 = z;
double r598526 = r598524 / r598525;
double r598527 = -4.618348997748282e+236;
bool r598528 = r598526 <= r598527;
double r598529 = x;
double r598530 = r598529 * r598524;
double r598531 = 1.0;
double r598532 = r598531 / r598525;
double r598533 = r598530 * r598532;
double r598534 = -6.879236260838423e-264;
bool r598535 = r598526 <= r598534;
double r598536 = r598529 * r598526;
double r598537 = 1.0668961029144e-310;
bool r598538 = r598526 <= r598537;
double r598539 = r598525 / r598530;
double r598540 = r598531 / r598539;
double r598541 = 8.698509888287693e+221;
bool r598542 = r598526 <= r598541;
double r598543 = r598525 / r598524;
double r598544 = r598529 / r598543;
double r598545 = r598525 / r598529;
double r598546 = r598545 / r598524;
double r598547 = r598531 / r598546;
double r598548 = r598542 ? r598544 : r598547;
double r598549 = r598538 ? r598540 : r598548;
double r598550 = r598535 ? r598536 : r598549;
double r598551 = r598528 ? r598533 : r598550;
return r598551;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 14.8 |
|---|---|
| Target | 1.7 |
| Herbie | 0.4 |
if (/ y z) < -4.618348997748282e+236Initial program 47.2
Simplified36.9
rmApplied div-inv36.9
Applied associate-*r*1.2
if -4.618348997748282e+236 < (/ y z) < -6.879236260838423e-264Initial program 9.7
Simplified0.2
if -6.879236260838423e-264 < (/ y z) < 1.0668961029144e-310Initial program 19.2
Simplified16.5
rmApplied associate-*r/0.1
rmApplied clear-num0.9
if 1.0668961029144e-310 < (/ y z) < 8.698509888287693e+221Initial program 9.0
Simplified0.2
rmApplied associate-*r/8.6
rmApplied associate-/l*0.3
if 8.698509888287693e+221 < (/ y z) Initial program 44.5
Simplified29.9
rmApplied associate-*r/0.8
rmApplied clear-num0.9
rmApplied associate-/r*0.6
Final simplification0.4
herbie shell --seed 2020064
(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)))