x \cdot \frac{\frac{y}{z} \cdot t}{t}\begin{array}{l}
\mathbf{if}\;\frac{y}{z} \le -3.06893781831439348 \cdot 10^{259}:\\
\;\;\;\;{\left(\left(x \cdot y\right) \cdot \frac{1}{z}\right)}^{1}\\
\mathbf{elif}\;\frac{y}{z} \le -9.6741057542884294 \cdot 10^{-296}:\\
\;\;\;\;{\left(\frac{x}{\frac{z}{y}}\right)}^{1}\\
\mathbf{elif}\;\frac{y}{z} \le 3.1054900882765682 \cdot 10^{-293}:\\
\;\;\;\;{\left(\left(x \cdot y\right) \cdot \frac{1}{z}\right)}^{1}\\
\mathbf{elif}\;\frac{y}{z} \le 3.9706404122678694 \cdot 10^{93}:\\
\;\;\;\;{\left(\frac{x}{\frac{z}{y}}\right)}^{1}\\
\mathbf{else}:\\
\;\;\;\;{\left(\frac{1}{\frac{z}{x \cdot y}}\right)}^{1}\\
\end{array}double f(double x, double y, double z, double t) {
double r490086 = x;
double r490087 = y;
double r490088 = z;
double r490089 = r490087 / r490088;
double r490090 = t;
double r490091 = r490089 * r490090;
double r490092 = r490091 / r490090;
double r490093 = r490086 * r490092;
return r490093;
}
double f(double x, double y, double z, double __attribute__((unused)) t) {
double r490094 = y;
double r490095 = z;
double r490096 = r490094 / r490095;
double r490097 = -3.0689378183143935e+259;
bool r490098 = r490096 <= r490097;
double r490099 = x;
double r490100 = r490099 * r490094;
double r490101 = 1.0;
double r490102 = r490101 / r490095;
double r490103 = r490100 * r490102;
double r490104 = pow(r490103, r490101);
double r490105 = -9.674105754288429e-296;
bool r490106 = r490096 <= r490105;
double r490107 = r490095 / r490094;
double r490108 = r490099 / r490107;
double r490109 = pow(r490108, r490101);
double r490110 = 3.105490088276568e-293;
bool r490111 = r490096 <= r490110;
double r490112 = 3.9706404122678694e+93;
bool r490113 = r490096 <= r490112;
double r490114 = r490095 / r490100;
double r490115 = r490101 / r490114;
double r490116 = pow(r490115, r490101);
double r490117 = r490113 ? r490109 : r490116;
double r490118 = r490111 ? r490104 : r490117;
double r490119 = r490106 ? r490109 : r490118;
double r490120 = r490098 ? r490104 : r490119;
return r490120;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 14.8 |
|---|---|
| Target | 1.6 |
| Herbie | 0.8 |
if (/ y z) < -3.0689378183143935e+259 or -9.674105754288429e-296 < (/ y z) < 3.105490088276568e-293Initial program 25.8
Simplified22.1
rmApplied add-cube-cbrt22.3
Applied *-un-lft-identity22.3
Applied times-frac22.2
Applied associate-*r*4.4
Simplified4.4
rmApplied pow14.4
Applied pow14.4
Applied pow-prod-down4.4
Simplified0.1
rmApplied div-inv0.2
if -3.0689378183143935e+259 < (/ y z) < -9.674105754288429e-296 or 3.105490088276568e-293 < (/ y z) < 3.9706404122678694e+93Initial program 9.4
Simplified0.2
rmApplied add-cube-cbrt1.2
Applied *-un-lft-identity1.2
Applied times-frac1.2
Applied associate-*r*5.9
Simplified5.9
rmApplied pow15.9
Applied pow15.9
Applied pow-prod-down5.9
Simplified8.1
rmApplied associate-/l*0.2
if 3.9706404122678694e+93 < (/ y z) Initial program 27.5
Simplified13.7
rmApplied add-cube-cbrt14.6
Applied *-un-lft-identity14.6
Applied times-frac14.6
Applied associate-*r*4.6
Simplified4.5
rmApplied pow14.5
Applied pow14.5
Applied pow-prod-down4.5
Simplified4.8
rmApplied clear-num4.9
Final simplification0.8
herbie shell --seed 2020035
(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)))