x \cdot \frac{\frac{y}{z} \cdot t}{t}\begin{array}{l}
\mathbf{if}\;\frac{y}{z} \le -2.89968713120227716200243957970138180903 \cdot 10^{210}:\\
\;\;\;\;\frac{y}{\frac{z}{x}}\\
\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 r491947 = x;
double r491948 = y;
double r491949 = z;
double r491950 = r491948 / r491949;
double r491951 = t;
double r491952 = r491950 * r491951;
double r491953 = r491952 / r491951;
double r491954 = r491947 * r491953;
return r491954;
}
double f(double x, double y, double z, double __attribute__((unused)) t) {
double r491955 = y;
double r491956 = z;
double r491957 = r491955 / r491956;
double r491958 = -2.899687131202277e+210;
bool r491959 = r491957 <= r491958;
double r491960 = x;
double r491961 = r491956 / r491960;
double r491962 = r491955 / r491961;
double r491963 = -2.67455315287703e-163;
bool r491964 = r491957 <= r491963;
double r491965 = r491957 * r491960;
double r491966 = -0.0;
bool r491967 = r491957 <= r491966;
double r491968 = r491955 * r491960;
double r491969 = r491968 / r491956;
double r491970 = 1.2882432281575047e+170;
bool r491971 = r491957 <= r491970;
double r491972 = 1.0;
double r491973 = r491972 / r491960;
double r491974 = r491957 / r491973;
double r491975 = r491960 / r491956;
double r491976 = r491955 * r491975;
double r491977 = r491971 ? r491974 : r491976;
double r491978 = r491967 ? r491969 : r491977;
double r491979 = r491964 ? r491965 : r491978;
double r491980 = r491959 ? r491962 : r491979;
return r491980;
}




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
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 +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)))