\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\
\;\;\;\;\frac{a1 \cdot \frac{a2}{b2}}{b1}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -8.843324609247471005376211875053257441102 \cdot 10^{-307}:\\
\;\;\;\;\frac{a1 \cdot a2}{b2 \cdot b1}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -0.0:\\
\;\;\;\;\frac{a1 \cdot \frac{a2}{b2}}{b1}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.464542161086205916851616380334111321007 \cdot 10^{288}:\\
\;\;\;\;\frac{a1 \cdot a2}{b2 \cdot b1}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{a1}{b1} \cdot a2}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r80223 = a1;
double r80224 = a2;
double r80225 = r80223 * r80224;
double r80226 = b1;
double r80227 = b2;
double r80228 = r80226 * r80227;
double r80229 = r80225 / r80228;
return r80229;
}
double f(double a1, double a2, double b1, double b2) {
double r80230 = a1;
double r80231 = a2;
double r80232 = r80230 * r80231;
double r80233 = b1;
double r80234 = b2;
double r80235 = r80233 * r80234;
double r80236 = r80232 / r80235;
double r80237 = -inf.0;
bool r80238 = r80236 <= r80237;
double r80239 = r80231 / r80234;
double r80240 = r80230 * r80239;
double r80241 = r80240 / r80233;
double r80242 = -8.843324609247471e-307;
bool r80243 = r80236 <= r80242;
double r80244 = r80234 * r80233;
double r80245 = r80232 / r80244;
double r80246 = -0.0;
bool r80247 = r80236 <= r80246;
double r80248 = 1.464542161086206e+288;
bool r80249 = r80236 <= r80248;
double r80250 = r80230 / r80233;
double r80251 = r80250 * r80231;
double r80252 = r80251 / r80234;
double r80253 = r80249 ? r80245 : r80252;
double r80254 = r80247 ? r80241 : r80253;
double r80255 = r80243 ? r80245 : r80254;
double r80256 = r80238 ? r80241 : r80255;
return r80256;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.3 |
|---|---|
| Target | 10.9 |
| Herbie | 3.1 |
if (/ (* a1 a2) (* b1 b2)) < -inf.0 or -8.843324609247471e-307 < (/ (* a1 a2) (* b1 b2)) < -0.0Initial program 22.4
rmApplied times-frac3.6
rmApplied associate-*l/5.6
if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -8.843324609247471e-307 or -0.0 < (/ (* a1 a2) (* b1 b2)) < 1.464542161086206e+288Initial program 3.7
rmApplied times-frac13.1
rmApplied div-inv13.1
Applied associate-*r*12.1
rmApplied associate-*l/7.8
Applied frac-times3.7
Simplified3.7
Simplified3.7
if 1.464542161086206e+288 < (/ (* a1 a2) (* b1 b2)) Initial program 59.6
rmApplied times-frac7.2
rmApplied div-inv7.3
Applied associate-*r*13.1
rmApplied un-div-inv13.1
Final simplification3.1
herbie shell --seed 2019326
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))