\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -6.245903185019271 \cdot 10^{+204}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -6.848939379187657 \cdot 10^{-209}:\\
\;\;\;\;\frac{1}{\frac{b2 \cdot b1}{a1 \cdot a2}}\\
\mathbf{elif}\;a1 \cdot a2 \le 8.9817388408212 \cdot 10^{-316}:\\
\;\;\;\;\left(\frac{\sqrt[3]{a1}}{b1} \cdot \frac{a2}{b2}\right) \cdot \left(\sqrt[3]{a1} \cdot \sqrt[3]{a1}\right)\\
\mathbf{elif}\;a1 \cdot a2 \le 1.0693629293958468 \cdot 10^{+158}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r4758471 = a1;
double r4758472 = a2;
double r4758473 = r4758471 * r4758472;
double r4758474 = b1;
double r4758475 = b2;
double r4758476 = r4758474 * r4758475;
double r4758477 = r4758473 / r4758476;
return r4758477;
}
double f(double a1, double a2, double b1, double b2) {
double r4758478 = a1;
double r4758479 = a2;
double r4758480 = r4758478 * r4758479;
double r4758481 = -6.245903185019271e+204;
bool r4758482 = r4758480 <= r4758481;
double r4758483 = b1;
double r4758484 = r4758478 / r4758483;
double r4758485 = b2;
double r4758486 = r4758479 / r4758485;
double r4758487 = r4758484 * r4758486;
double r4758488 = -6.848939379187657e-209;
bool r4758489 = r4758480 <= r4758488;
double r4758490 = 1.0;
double r4758491 = r4758485 * r4758483;
double r4758492 = r4758491 / r4758480;
double r4758493 = r4758490 / r4758492;
double r4758494 = 8.9817388408212e-316;
bool r4758495 = r4758480 <= r4758494;
double r4758496 = cbrt(r4758478);
double r4758497 = r4758496 / r4758483;
double r4758498 = r4758497 * r4758486;
double r4758499 = r4758496 * r4758496;
double r4758500 = r4758498 * r4758499;
double r4758501 = 1.0693629293958468e+158;
bool r4758502 = r4758480 <= r4758501;
double r4758503 = r4758480 / r4758483;
double r4758504 = r4758503 / r4758485;
double r4758505 = r4758502 ? r4758504 : r4758487;
double r4758506 = r4758495 ? r4758500 : r4758505;
double r4758507 = r4758489 ? r4758493 : r4758506;
double r4758508 = r4758482 ? r4758487 : r4758507;
return r4758508;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 10.8 |
|---|---|
| Target | 10.6 |
| Herbie | 5.4 |
if (* a1 a2) < -6.245903185019271e+204 or 1.0693629293958468e+158 < (* a1 a2) Initial program 29.3
rmApplied times-frac11.4
if -6.245903185019271e+204 < (* a1 a2) < -6.848939379187657e-209Initial program 3.9
rmApplied clear-num4.2
if -6.848939379187657e-209 < (* a1 a2) < 8.9817388408212e-316Initial program 17.6
rmApplied times-frac3.6
rmApplied *-un-lft-identity3.6
Applied add-cube-cbrt4.0
Applied times-frac4.0
Applied associate-*l*3.1
if 8.9817388408212e-316 < (* a1 a2) < 1.0693629293958468e+158Initial program 4.4
rmApplied associate-/r*5.2
Final simplification5.4
herbie shell --seed 2019152 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))