x \cdot \frac{\frac{y}{z} \cdot t}{t}\begin{array}{l}
\mathbf{if}\;\frac{y}{z} \le -1.1673826862143979 \cdot 10^{+231}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{elif}\;\frac{y}{z} \le -1.8275878233556424 \cdot 10^{-156}:\\
\;\;\;\;\frac{y}{z} \cdot x\\
\mathbf{elif}\;\frac{y}{z} \le 1.0532503690597818 \cdot 10^{-123}:\\
\;\;\;\;\frac{x}{z} \cdot y\\
\mathbf{elif}\;\frac{y}{z} \le 1.1115659814397386 \cdot 10^{+232}:\\
\;\;\;\;\frac{y}{z} \cdot x\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{z} \cdot y\\
\end{array}double f(double x, double y, double z, double t) {
double r27846940 = x;
double r27846941 = y;
double r27846942 = z;
double r27846943 = r27846941 / r27846942;
double r27846944 = t;
double r27846945 = r27846943 * r27846944;
double r27846946 = r27846945 / r27846944;
double r27846947 = r27846940 * r27846946;
return r27846947;
}
double f(double x, double y, double z, double __attribute__((unused)) t) {
double r27846948 = y;
double r27846949 = z;
double r27846950 = r27846948 / r27846949;
double r27846951 = -1.1673826862143979e+231;
bool r27846952 = r27846950 <= r27846951;
double r27846953 = x;
double r27846954 = r27846953 * r27846948;
double r27846955 = r27846954 / r27846949;
double r27846956 = -1.8275878233556424e-156;
bool r27846957 = r27846950 <= r27846956;
double r27846958 = r27846950 * r27846953;
double r27846959 = 1.0532503690597818e-123;
bool r27846960 = r27846950 <= r27846959;
double r27846961 = r27846953 / r27846949;
double r27846962 = r27846961 * r27846948;
double r27846963 = 1.1115659814397386e+232;
bool r27846964 = r27846950 <= r27846963;
double r27846965 = r27846964 ? r27846958 : r27846962;
double r27846966 = r27846960 ? r27846962 : r27846965;
double r27846967 = r27846957 ? r27846958 : r27846966;
double r27846968 = r27846952 ? r27846955 : r27846967;
return r27846968;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 14.7 |
|---|---|
| Target | 1.4 |
| Herbie | 0.7 |
if (/ y z) < -1.1673826862143979e+231Initial program 47.5
Simplified0.7
Taylor expanded around 0 0.7
if -1.1673826862143979e+231 < (/ y z) < -1.8275878233556424e-156 or 1.0532503690597818e-123 < (/ y z) < 1.1115659814397386e+232Initial program 7.9
Simplified10.8
Taylor expanded around 0 9.3
rmApplied *-un-lft-identity9.3
Applied times-frac0.3
Simplified0.3
if -1.8275878233556424e-156 < (/ y z) < 1.0532503690597818e-123 or 1.1115659814397386e+232 < (/ y z) Initial program 19.8
Simplified1.3
Final simplification0.7
herbie shell --seed 2019168
(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)))