\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 = -\infty:\\
\;\;\;\;\frac{\frac{a1}{b2}}{b1} \cdot a2\\
\mathbf{elif}\;a1 \cdot a2 \le -3.239188966439507092571720652735298944769 \cdot 10^{-112}:\\
\;\;\;\;\frac{1}{b1 \cdot b2} \cdot \left(a1 \cdot a2\right)\\
\mathbf{elif}\;a1 \cdot a2 \le -1.818985289795094297976180574800361145199 \cdot 10^{-216}:\\
\;\;\;\;\frac{1}{b1} \cdot \frac{a1}{\frac{b2}{a2}}\\
\mathbf{elif}\;a1 \cdot a2 \le -1.008422558588387463522628361222361000871 \cdot 10^{-262}:\\
\;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\
\mathbf{elif}\;a1 \cdot a2 \le 7.84171448107782709423190512508333836091 \cdot 10^{-206}:\\
\;\;\;\;\frac{a1}{b1 \cdot \frac{b2}{a2}}\\
\mathbf{elif}\;a1 \cdot a2 \le 4.719850018748400047965767698303354255313 \cdot 10^{-39}:\\
\;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\
\mathbf{elif}\;a1 \cdot a2 \le 2.755921950293857730592587778295672190212 \cdot 10^{-31} \lor \neg \left(a1 \cdot a2 \le 3.42493188796159484839257753426458995292 \cdot 10^{160}\right):\\
\;\;\;\;\frac{\frac{a1}{b2}}{b1} \cdot a2\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{b1 \cdot b2} \cdot \left(a1 \cdot a2\right)\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r88980 = a1;
double r88981 = a2;
double r88982 = r88980 * r88981;
double r88983 = b1;
double r88984 = b2;
double r88985 = r88983 * r88984;
double r88986 = r88982 / r88985;
return r88986;
}
double f(double a1, double a2, double b1, double b2) {
double r88987 = a1;
double r88988 = a2;
double r88989 = r88987 * r88988;
double r88990 = -inf.0;
bool r88991 = r88989 <= r88990;
double r88992 = b2;
double r88993 = r88987 / r88992;
double r88994 = b1;
double r88995 = r88993 / r88994;
double r88996 = r88995 * r88988;
double r88997 = -3.239188966439507e-112;
bool r88998 = r88989 <= r88997;
double r88999 = 1.0;
double r89000 = r88994 * r88992;
double r89001 = r88999 / r89000;
double r89002 = r89001 * r88989;
double r89003 = -1.8189852897950943e-216;
bool r89004 = r88989 <= r89003;
double r89005 = r88999 / r88994;
double r89006 = r88992 / r88988;
double r89007 = r88987 / r89006;
double r89008 = r89005 * r89007;
double r89009 = -1.0084225585883875e-262;
bool r89010 = r88989 <= r89009;
double r89011 = r89000 / r88989;
double r89012 = r88999 / r89011;
double r89013 = 7.841714481077827e-206;
bool r89014 = r88989 <= r89013;
double r89015 = r88994 * r89006;
double r89016 = r88987 / r89015;
double r89017 = 4.7198500187484e-39;
bool r89018 = r88989 <= r89017;
double r89019 = 2.7559219502938577e-31;
bool r89020 = r88989 <= r89019;
double r89021 = 3.424931887961595e+160;
bool r89022 = r88989 <= r89021;
double r89023 = !r89022;
bool r89024 = r89020 || r89023;
double r89025 = r89024 ? r88996 : r89002;
double r89026 = r89018 ? r89012 : r89025;
double r89027 = r89014 ? r89016 : r89026;
double r89028 = r89010 ? r89012 : r89027;
double r89029 = r89004 ? r89008 : r89028;
double r89030 = r88998 ? r89002 : r89029;
double r89031 = r88991 ? r88996 : r89030;
return r89031;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 10.8 |
|---|---|
| Target | 10.9 |
| Herbie | 5.9 |
if (* a1 a2) < -inf.0 or 4.7198500187484e-39 < (* a1 a2) < 2.7559219502938577e-31 or 3.424931887961595e+160 < (* a1 a2) Initial program 33.7
rmApplied associate-/l*17.0
rmApplied *-un-lft-identity17.0
Applied times-frac9.3
Applied *-un-lft-identity9.3
Applied times-frac18.2
Simplified18.2
rmApplied associate-/r/17.9
Applied associate-*r*12.7
Simplified12.6
if -inf.0 < (* a1 a2) < -3.239188966439507e-112 or 2.7559219502938577e-31 < (* a1 a2) < 3.424931887961595e+160Initial program 4.2
rmApplied associate-/l*11.8
rmApplied div-inv11.9
Applied *-un-lft-identity11.9
Applied times-frac4.5
Simplified4.4
if -3.239188966439507e-112 < (* a1 a2) < -1.8189852897950943e-216Initial program 5.9
rmApplied associate-/l*8.7
rmApplied *-un-lft-identity8.7
Applied times-frac9.0
Applied *-un-lft-identity9.0
Applied times-frac8.3
Simplified8.3
if -1.8189852897950943e-216 < (* a1 a2) < -1.0084225585883875e-262 or 7.841714481077827e-206 < (* a1 a2) < 4.7198500187484e-39Initial program 6.3
rmApplied clear-num6.6
if -1.0084225585883875e-262 < (* a1 a2) < 7.841714481077827e-206Initial program 15.4
rmApplied associate-/l*7.5
rmApplied *-un-lft-identity7.5
Applied times-frac3.8
Simplified3.8
Final simplification5.9
herbie shell --seed 2019212 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))