x \cdot \frac{\frac{y}{z} \cdot t}{t}\begin{array}{l}
\mathbf{if}\;\frac{y}{z} \le -1.009555688743657053093976996432682877192 \cdot 10^{278}:\\
\;\;\;\;y \cdot \frac{x}{z}\\
\mathbf{elif}\;\frac{y}{z} \le -1.900141742787772715345890115335440787699 \cdot 10^{-270}:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\mathbf{elif}\;\frac{y}{z} \le 4.438182973596565301288302827093808047147 \cdot 10^{-272}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{elif}\;\frac{y}{z} \le 3.561199608254915194562496763078682553454 \cdot 10^{97}:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{x}{z}}{\frac{1}{y}}\\
\end{array}double f(double x, double y, double z, double t) {
double r414799 = x;
double r414800 = y;
double r414801 = z;
double r414802 = r414800 / r414801;
double r414803 = t;
double r414804 = r414802 * r414803;
double r414805 = r414804 / r414803;
double r414806 = r414799 * r414805;
return r414806;
}
double f(double x, double y, double z, double __attribute__((unused)) t) {
double r414807 = y;
double r414808 = z;
double r414809 = r414807 / r414808;
double r414810 = -1.009555688743657e+278;
bool r414811 = r414809 <= r414810;
double r414812 = x;
double r414813 = r414812 / r414808;
double r414814 = r414807 * r414813;
double r414815 = -1.9001417427877727e-270;
bool r414816 = r414809 <= r414815;
double r414817 = r414808 / r414807;
double r414818 = r414812 / r414817;
double r414819 = 4.438182973596565e-272;
bool r414820 = r414809 <= r414819;
double r414821 = r414812 * r414807;
double r414822 = r414821 / r414808;
double r414823 = 3.561199608254915e+97;
bool r414824 = r414809 <= r414823;
double r414825 = 1.0;
double r414826 = r414825 / r414807;
double r414827 = r414813 / r414826;
double r414828 = r414824 ? r414818 : r414827;
double r414829 = r414820 ? r414822 : r414828;
double r414830 = r414816 ? r414818 : r414829;
double r414831 = r414811 ? r414814 : r414830;
return r414831;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 14.0 |
|---|---|
| Target | 1.4 |
| Herbie | 0.7 |
if (/ y z) < -1.009555688743657e+278Initial program 54.6
Simplified45.9
rmApplied div-inv45.9
Applied associate-*l*0.4
Simplified0.2
if -1.009555688743657e+278 < (/ y z) < -1.9001417427877727e-270 or 4.438182973596565e-272 < (/ y z) < 3.561199608254915e+97Initial program 8.2
Simplified0.2
rmApplied pow10.2
Applied pow10.2
Applied pow-prod-down0.2
Simplified8.7
rmApplied associate-/l*0.2
if -1.9001417427877727e-270 < (/ y z) < 4.438182973596565e-272Initial program 18.9
Simplified15.8
rmApplied pow115.8
Applied pow115.8
Applied pow-prod-down15.8
Simplified0.1
if 3.561199608254915e+97 < (/ y z) Initial program 26.4
Simplified12.8
rmApplied pow112.8
Applied pow112.8
Applied pow-prod-down12.8
Simplified4.1
rmApplied associate-/l*11.7
rmApplied div-inv11.8
Applied associate-/r*4.0
Final simplification0.7
herbie shell --seed 2019303
(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)))