\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -1.22113183805789549425064473008659101772 \cdot 10^{57}:\\
\;\;\;\;\frac{a1}{\left(\sqrt[3]{b2} \cdot \sqrt[3]{b2}\right) \cdot \left(\sqrt[3]{b1} \cdot \sqrt[3]{b1}\right)} \cdot \frac{\frac{a2}{\sqrt[3]{b1}}}{\sqrt[3]{b2}}\\
\mathbf{elif}\;a1 \cdot a2 \le -1.105414882725128694625808336485981933486 \cdot 10^{-132}:\\
\;\;\;\;\frac{a1 \cdot a2}{b2 \cdot b1}\\
\mathbf{elif}\;a1 \cdot a2 \le 3.77380536154540503460462623599196939534 \cdot 10^{-313}:\\
\;\;\;\;\frac{a1}{\left(\sqrt[3]{b2} \cdot \sqrt[3]{b2}\right) \cdot \left(\sqrt[3]{b1} \cdot \sqrt[3]{b1}\right)} \cdot \frac{\frac{a2}{\sqrt[3]{b1}}}{\sqrt[3]{b2}}\\
\mathbf{elif}\;a1 \cdot a2 \le 2.298732356418348872843780632336246724284 \cdot 10^{242}:\\
\;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{\frac{1}{b1}}{b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r106451 = a1;
double r106452 = a2;
double r106453 = r106451 * r106452;
double r106454 = b1;
double r106455 = b2;
double r106456 = r106454 * r106455;
double r106457 = r106453 / r106456;
return r106457;
}
double f(double a1, double a2, double b1, double b2) {
double r106458 = a1;
double r106459 = a2;
double r106460 = r106458 * r106459;
double r106461 = -1.2211318380578955e+57;
bool r106462 = r106460 <= r106461;
double r106463 = b2;
double r106464 = cbrt(r106463);
double r106465 = r106464 * r106464;
double r106466 = b1;
double r106467 = cbrt(r106466);
double r106468 = r106467 * r106467;
double r106469 = r106465 * r106468;
double r106470 = r106458 / r106469;
double r106471 = r106459 / r106467;
double r106472 = r106471 / r106464;
double r106473 = r106470 * r106472;
double r106474 = -1.1054148827251287e-132;
bool r106475 = r106460 <= r106474;
double r106476 = r106463 * r106466;
double r106477 = r106460 / r106476;
double r106478 = 3.7738053615454e-313;
bool r106479 = r106460 <= r106478;
double r106480 = 2.298732356418349e+242;
bool r106481 = r106460 <= r106480;
double r106482 = 1.0;
double r106483 = r106482 / r106466;
double r106484 = r106483 / r106463;
double r106485 = r106460 * r106484;
double r106486 = r106458 / r106466;
double r106487 = r106459 / r106463;
double r106488 = r106486 * r106487;
double r106489 = r106481 ? r106485 : r106488;
double r106490 = r106479 ? r106473 : r106489;
double r106491 = r106475 ? r106477 : r106490;
double r106492 = r106462 ? r106473 : r106491;
return r106492;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.1 |
|---|---|
| Target | 11.4 |
| Herbie | 5.1 |
if (* a1 a2) < -1.2211318380578955e+57 or -1.1054148827251287e-132 < (* a1 a2) < 3.7738053615454e-313Initial program 15.9
rmApplied associate-/r*16.0
rmApplied *-un-lft-identity16.0
Applied *-un-lft-identity16.0
Applied times-frac10.3
Applied times-frac8.0
Simplified8.0
rmApplied add-cube-cbrt8.5
Applied add-cube-cbrt8.7
Applied *-un-lft-identity8.7
Applied times-frac8.7
Applied times-frac6.8
Applied associate-*r*5.3
Simplified5.2
if -1.2211318380578955e+57 < (* a1 a2) < -1.1054148827251287e-132Initial program 1.8
rmApplied associate-/r*1.8
rmApplied *-un-lft-identity1.8
Applied times-frac10.5
Simplified10.5
rmApplied associate-*r/1.8
Applied associate-/l/1.8
if 3.7738053615454e-313 < (* a1 a2) < 2.298732356418349e+242Initial program 5.5
rmApplied associate-/r*5.4
rmApplied *-un-lft-identity5.4
Applied div-inv5.5
Applied times-frac5.6
Simplified5.6
if 2.298732356418349e+242 < (* a1 a2) Initial program 41.4
rmApplied times-frac11.6
Final simplification5.1
herbie shell --seed 2019308
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))