x \cdot \frac{\frac{y}{z} \cdot t}{t}\begin{array}{l}
\mathbf{if}\;\frac{y}{z} \le -1.96646549046934189 \cdot 10^{230}:\\
\;\;\;\;\frac{y}{\frac{z}{x}}\\
\mathbf{elif}\;\frac{y}{z} \le -3.2270242891442878 \cdot 10^{-105}:\\
\;\;\;\;\frac{y}{z} \cdot x\\
\mathbf{elif}\;\frac{y}{z} \le -0.0:\\
\;\;\;\;\frac{y \cdot x}{z}\\
\mathbf{elif}\;\frac{y}{z} \le 6.933654612229097 \cdot 10^{80}:\\
\;\;\;\;\frac{y}{z} \cdot x\\
\mathbf{else}:\\
\;\;\;\;\frac{y}{\frac{z}{x}}\\
\end{array}double f(double x, double y, double z, double t) {
double r421445 = x;
double r421446 = y;
double r421447 = z;
double r421448 = r421446 / r421447;
double r421449 = t;
double r421450 = r421448 * r421449;
double r421451 = r421450 / r421449;
double r421452 = r421445 * r421451;
return r421452;
}
double f(double x, double y, double z, double __attribute__((unused)) t) {
double r421453 = y;
double r421454 = z;
double r421455 = r421453 / r421454;
double r421456 = -1.966465490469342e+230;
bool r421457 = r421455 <= r421456;
double r421458 = x;
double r421459 = r421454 / r421458;
double r421460 = r421453 / r421459;
double r421461 = -3.2270242891442878e-105;
bool r421462 = r421455 <= r421461;
double r421463 = r421455 * r421458;
double r421464 = -0.0;
bool r421465 = r421455 <= r421464;
double r421466 = r421453 * r421458;
double r421467 = r421466 / r421454;
double r421468 = 6.933654612229097e+80;
bool r421469 = r421455 <= r421468;
double r421470 = r421469 ? r421463 : r421460;
double r421471 = r421465 ? r421467 : r421470;
double r421472 = r421462 ? r421463 : r421471;
double r421473 = r421457 ? r421460 : r421472;
return r421473;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 14.5 |
|---|---|
| Target | 1.5 |
| Herbie | 1.4 |
if (/ y z) < -1.966465490469342e+230 or 6.933654612229097e+80 < (/ y z) Initial program 32.0
Simplified3.2
rmApplied associate-/l*4.4
if -1.966465490469342e+230 < (/ y z) < -3.2270242891442878e-105 or -0.0 < (/ y z) < 6.933654612229097e+80Initial program 9.0
Simplified8.3
rmApplied associate-/l*8.7
rmApplied associate-/r/2.5
if -3.2270242891442878e-105 < (/ y z) < -0.0Initial program 15.3
Simplified1.8
Final simplification1.4
herbie shell --seed 2019199
(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)))