\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}:\\
\;\;\;\;\left(\sqrt[3]{a1} \cdot \sqrt[3]{a1}\right) \cdot \left(\frac{a2}{b2} \cdot \frac{\sqrt[3]{a1}}{b1}\right)\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r6419405 = a1;
double r6419406 = a2;
double r6419407 = r6419405 * r6419406;
double r6419408 = b1;
double r6419409 = b2;
double r6419410 = r6419408 * r6419409;
double r6419411 = r6419407 / r6419410;
return r6419411;
}
double f(double a1, double a2, double b1, double b2) {
double r6419412 = a1;
double r6419413 = a2;
double r6419414 = r6419412 * r6419413;
double r6419415 = -inf.0;
bool r6419416 = r6419414 <= r6419415;
double r6419417 = b1;
double r6419418 = r6419412 / r6419417;
double r6419419 = b2;
double r6419420 = r6419413 / r6419419;
double r6419421 = r6419418 * r6419420;
double r6419422 = -4.369619197843261e-287;
bool r6419423 = r6419414 <= r6419422;
double r6419424 = 1.0;
double r6419425 = r6419419 * r6419417;
double r6419426 = r6419425 / r6419414;
double r6419427 = r6419424 / r6419426;
double r6419428 = 2.983618642889101e-209;
bool r6419429 = r6419414 <= r6419428;
double r6419430 = 5.979773594632941e+199;
bool r6419431 = r6419414 <= r6419430;
double r6419432 = r6419414 / r6419417;
double r6419433 = r6419432 / r6419419;
double r6419434 = cbrt(r6419412);
double r6419435 = r6419434 * r6419434;
double r6419436 = r6419434 / r6419417;
double r6419437 = r6419420 * r6419436;
double r6419438 = r6419435 * r6419437;
double r6419439 = r6419431 ? r6419433 : r6419438;
double r6419440 = r6419429 ? r6419421 : r6419439;
double r6419441 = r6419423 ? r6419427 : r6419440;
double r6419442 = r6419416 ? r6419421 : r6419441;
return r6419442;
}




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.3 |
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 *-un-lft-identity11.5
Applied add-cube-cbrt12.3
Applied times-frac12.3
Applied associate-*l*10.0
Final simplification5.3
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)))