\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -1.92230603891585 \cdot 10^{+159}:\\
\;\;\;\;\frac{a2}{b1} \cdot \frac{a1}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -4.3772523069453377 \cdot 10^{-275}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 8.784788332872323 \cdot 10^{-275}:\\
\;\;\;\;\frac{a1}{\frac{b2}{a2}} \cdot \frac{1}{b1}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r6348007 = a1;
double r6348008 = a2;
double r6348009 = r6348007 * r6348008;
double r6348010 = b1;
double r6348011 = b2;
double r6348012 = r6348010 * r6348011;
double r6348013 = r6348009 / r6348012;
return r6348013;
}
double f(double a1, double a2, double b1, double b2) {
double r6348014 = a1;
double r6348015 = a2;
double r6348016 = r6348014 * r6348015;
double r6348017 = -1.92230603891585e+159;
bool r6348018 = r6348016 <= r6348017;
double r6348019 = b1;
double r6348020 = r6348015 / r6348019;
double r6348021 = b2;
double r6348022 = r6348014 / r6348021;
double r6348023 = r6348020 * r6348022;
double r6348024 = -4.3772523069453377e-275;
bool r6348025 = r6348016 <= r6348024;
double r6348026 = r6348016 / r6348019;
double r6348027 = r6348026 / r6348021;
double r6348028 = 8.784788332872323e-275;
bool r6348029 = r6348016 <= r6348028;
double r6348030 = r6348021 / r6348015;
double r6348031 = r6348014 / r6348030;
double r6348032 = 1.0;
double r6348033 = r6348032 / r6348019;
double r6348034 = r6348031 * r6348033;
double r6348035 = r6348029 ? r6348034 : r6348027;
double r6348036 = r6348025 ? r6348027 : r6348035;
double r6348037 = r6348018 ? r6348023 : r6348036;
return r6348037;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.1 |
|---|---|
| Target | 11.5 |
| Herbie | 7.6 |
if (* a1 a2) < -1.92230603891585e+159Initial program 26.7
rmApplied associate-/r*26.3
rmApplied clear-num26.3
rmApplied *-un-lft-identity26.3
Applied div-inv26.3
Applied times-frac26.3
Simplified26.3
Simplified11.4
if -1.92230603891585e+159 < (* a1 a2) < -4.3772523069453377e-275 or 8.784788332872323e-275 < (* a1 a2) Initial program 7.2
rmApplied associate-/r*7.1
if -4.3772523069453377e-275 < (* a1 a2) < 8.784788332872323e-275Initial program 18.3
rmApplied associate-/r*18.3
rmApplied clear-num18.4
rmApplied *-un-lft-identity18.4
Applied div-inv19.4
Applied add-cube-cbrt19.4
Applied times-frac19.2
Applied times-frac18.9
Simplified18.9
Simplified7.4
Final simplification7.6
herbie shell --seed 2019142 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))