\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 = -\infty:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -4.369619197843261223988403902442698260098 \cdot 10^{-287}:\\
\;\;\;\;\frac{1}{\frac{b2 \cdot b1}{a1 \cdot a2}}\\
\mathbf{elif}\;a1 \cdot a2 \le 2.983618642889101104598899002423951855124 \cdot 10^{-209}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 5.979773594632940735324722698003690676961 \cdot 10^{199}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a2}{\sqrt[3]{b2}} \cdot \left(\frac{a1}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{1}{b1}\right)\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r5478364 = a1;
double r5478365 = a2;
double r5478366 = r5478364 * r5478365;
double r5478367 = b1;
double r5478368 = b2;
double r5478369 = r5478367 * r5478368;
double r5478370 = r5478366 / r5478369;
return r5478370;
}
double f(double a1, double a2, double b1, double b2) {
double r5478371 = a1;
double r5478372 = a2;
double r5478373 = r5478371 * r5478372;
double r5478374 = -inf.0;
bool r5478375 = r5478373 <= r5478374;
double r5478376 = b1;
double r5478377 = r5478371 / r5478376;
double r5478378 = b2;
double r5478379 = r5478372 / r5478378;
double r5478380 = r5478377 * r5478379;
double r5478381 = -4.369619197843261e-287;
bool r5478382 = r5478373 <= r5478381;
double r5478383 = 1.0;
double r5478384 = r5478378 * r5478376;
double r5478385 = r5478384 / r5478373;
double r5478386 = r5478383 / r5478385;
double r5478387 = 2.983618642889101e-209;
bool r5478388 = r5478373 <= r5478387;
double r5478389 = 5.979773594632941e+199;
bool r5478390 = r5478373 <= r5478389;
double r5478391 = r5478373 / r5478376;
double r5478392 = r5478391 / r5478378;
double r5478393 = cbrt(r5478378);
double r5478394 = r5478372 / r5478393;
double r5478395 = r5478393 * r5478393;
double r5478396 = r5478371 / r5478395;
double r5478397 = r5478383 / r5478376;
double r5478398 = r5478396 * r5478397;
double r5478399 = r5478394 * r5478398;
double r5478400 = r5478390 ? r5478392 : r5478399;
double r5478401 = r5478388 ? r5478380 : r5478400;
double r5478402 = r5478382 ? r5478386 : r5478401;
double r5478403 = r5478375 ? r5478380 : r5478402;
return r5478403;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.5 |
|---|---|
| Target | 11.1 |
| Herbie | 5.2 |
if (* a1 a2) < -inf.0 or -4.369619197843261e-287 < (* a1 a2) < 2.983618642889101e-209Initial program 21.8
rmApplied times-frac4.0
if -inf.0 < (* a1 a2) < -4.369619197843261e-287Initial program 5.9
rmApplied clear-num6.2
if 2.983618642889101e-209 < (* a1 a2) < 5.979773594632941e+199Initial program 4.5
rmApplied associate-/r*4.3
if 5.979773594632941e+199 < (* a1 a2) Initial program 34.1
rmApplied times-frac11.5
rmApplied add-cube-cbrt12.3
Applied *-un-lft-identity12.3
Applied times-frac12.3
Applied associate-*r*10.2
Simplified8.9
rmApplied div-inv8.9
Final simplification5.2
herbie shell --seed 2019172 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))