\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 2.269899606291676636189977388218092617797 \cdot 10^{224}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\sqrt[3]{b2}} \cdot \left(a2 \cdot \frac{\frac{\sqrt[3]{\frac{1}{b2}} \cdot a1}{b1}}{\sqrt[3]{b2}}\right)\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r6141546 = a1;
double r6141547 = a2;
double r6141548 = r6141546 * r6141547;
double r6141549 = b1;
double r6141550 = b2;
double r6141551 = r6141549 * r6141550;
double r6141552 = r6141548 / r6141551;
return r6141552;
}
double f(double a1, double a2, double b1, double b2) {
double r6141553 = a1;
double r6141554 = a2;
double r6141555 = r6141553 * r6141554;
double r6141556 = -inf.0;
bool r6141557 = r6141555 <= r6141556;
double r6141558 = b1;
double r6141559 = r6141553 / r6141558;
double r6141560 = b2;
double r6141561 = r6141554 / r6141560;
double r6141562 = r6141559 * r6141561;
double r6141563 = -4.369619197843261e-287;
bool r6141564 = r6141555 <= r6141563;
double r6141565 = 1.0;
double r6141566 = r6141560 * r6141558;
double r6141567 = r6141566 / r6141555;
double r6141568 = r6141565 / r6141567;
double r6141569 = 2.983618642889101e-209;
bool r6141570 = r6141555 <= r6141569;
double r6141571 = 2.2698996062916766e+224;
bool r6141572 = r6141555 <= r6141571;
double r6141573 = r6141555 / r6141558;
double r6141574 = r6141573 / r6141560;
double r6141575 = cbrt(r6141560);
double r6141576 = r6141565 / r6141575;
double r6141577 = r6141565 / r6141560;
double r6141578 = cbrt(r6141577);
double r6141579 = r6141578 * r6141553;
double r6141580 = r6141579 / r6141558;
double r6141581 = r6141580 / r6141575;
double r6141582 = r6141554 * r6141581;
double r6141583 = r6141576 * r6141582;
double r6141584 = r6141572 ? r6141574 : r6141583;
double r6141585 = r6141570 ? r6141562 : r6141584;
double r6141586 = r6141564 ? r6141568 : r6141585;
double r6141587 = r6141557 ? r6141562 : r6141586;
return r6141587;
}




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) < 2.2698996062916766e+224Initial program 4.8
rmApplied associate-/r*4.4
if 2.2698996062916766e+224 < (* a1 a2) Initial program 38.1
rmApplied times-frac11.2
rmApplied add-cube-cbrt12.0
Applied *-un-lft-identity12.0
Applied times-frac12.0
Applied associate-*r*9.8
Simplified9.8
Taylor expanded around 0 38.0
Simplified8.5
rmApplied div-inv8.5
Applied associate-*r*10.6
Final simplification5.3
herbie shell --seed 2019172
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))