\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -6.897241169256815 \cdot 10^{+159}:\\
\;\;\;\;\frac{\frac{\sqrt[3]{a1}}{\sqrt[3]{b1}} \cdot \frac{\sqrt[3]{a1}}{\sqrt[3]{b1}}}{\frac{b2}{\frac{1}{\frac{\frac{\sqrt[3]{b1}}{a2}}{\sqrt[3]{a1}}}}}\\
\mathbf{elif}\;a1 \cdot a2 \le -4.213300454402738 \cdot 10^{-210}:\\
\;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{\frac{1}{b1}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 2.8391901767890553 \cdot 10^{-163}:\\
\;\;\;\;\frac{\frac{a2}{b1}}{\frac{b2}{a1}}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.3171664498037926 \cdot 10^{+299}:\\
\;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{\frac{1}{b1}}{b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a2}{b2} \cdot \frac{a1}{b1}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r37159594 = a1;
double r37159595 = a2;
double r37159596 = r37159594 * r37159595;
double r37159597 = b1;
double r37159598 = b2;
double r37159599 = r37159597 * r37159598;
double r37159600 = r37159596 / r37159599;
return r37159600;
}
double f(double a1, double a2, double b1, double b2) {
double r37159601 = a1;
double r37159602 = a2;
double r37159603 = r37159601 * r37159602;
double r37159604 = -6.897241169256815e+159;
bool r37159605 = r37159603 <= r37159604;
double r37159606 = cbrt(r37159601);
double r37159607 = b1;
double r37159608 = cbrt(r37159607);
double r37159609 = r37159606 / r37159608;
double r37159610 = r37159609 * r37159609;
double r37159611 = b2;
double r37159612 = 1.0;
double r37159613 = r37159608 / r37159602;
double r37159614 = r37159613 / r37159606;
double r37159615 = r37159612 / r37159614;
double r37159616 = r37159611 / r37159615;
double r37159617 = r37159610 / r37159616;
double r37159618 = -4.213300454402738e-210;
bool r37159619 = r37159603 <= r37159618;
double r37159620 = r37159612 / r37159607;
double r37159621 = r37159620 / r37159611;
double r37159622 = r37159603 * r37159621;
double r37159623 = 2.8391901767890553e-163;
bool r37159624 = r37159603 <= r37159623;
double r37159625 = r37159602 / r37159607;
double r37159626 = r37159611 / r37159601;
double r37159627 = r37159625 / r37159626;
double r37159628 = 1.3171664498037926e+299;
bool r37159629 = r37159603 <= r37159628;
double r37159630 = r37159602 / r37159611;
double r37159631 = r37159601 / r37159607;
double r37159632 = r37159630 * r37159631;
double r37159633 = r37159629 ? r37159622 : r37159632;
double r37159634 = r37159624 ? r37159627 : r37159633;
double r37159635 = r37159619 ? r37159622 : r37159634;
double r37159636 = r37159605 ? r37159617 : r37159635;
return r37159636;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 10.8 |
|---|---|
| Target | 10.9 |
| Herbie | 5.3 |
if (* a1 a2) < -6.897241169256815e+159Initial program 26.1
rmApplied associate-/r*26.4
rmApplied associate-/l*15.6
rmApplied clear-num15.7
rmApplied add-cube-cbrt16.3
Applied *-un-lft-identity16.3
Applied add-cube-cbrt16.5
Applied times-frac16.5
Applied times-frac15.3
Applied *-un-lft-identity15.3
Applied times-frac15.4
Applied associate-/l*8.9
Simplified8.9
if -6.897241169256815e+159 < (* a1 a2) < -4.213300454402738e-210 or 2.8391901767890553e-163 < (* a1 a2) < 1.3171664498037926e+299Initial program 4.7
rmApplied associate-/r*4.3
rmApplied *-un-lft-identity4.3
Applied div-inv4.4
Applied times-frac4.8
Simplified4.8
if -4.213300454402738e-210 < (* a1 a2) < 2.8391901767890553e-163Initial program 13.5
rmApplied associate-/r*13.3
rmApplied associate-/l*7.6
rmApplied clear-num8.0
rmApplied associate-/r/7.7
Applied associate-/l*5.3
Simplified5.0
if 1.3171664498037926e+299 < (* a1 a2) Initial program 57.6
rmApplied associate-/r*57.9
rmApplied associate-/l*24.9
rmApplied *-un-lft-identity24.9
Applied associate-/r/25.0
Applied times-frac7.4
Simplified7.4
Final simplification5.3
herbie shell --seed 2019124
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))