\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -9.78621637012035120889222133129827862576 \cdot 10^{209}:\\
\;\;\;\;\frac{1}{b1 \cdot \frac{\frac{b2}{a2}}{a1}}\\
\mathbf{elif}\;b1 \cdot b2 \le -9.111280530104685398727222154888263046467 \cdot 10^{-184}:\\
\;\;\;\;\frac{\frac{1}{\frac{b1 \cdot b2}{\sqrt[3]{a1} \cdot \sqrt[3]{a1}}}}{\frac{\frac{1}{a2}}{\sqrt[3]{a1}}}\\
\mathbf{elif}\;b1 \cdot b2 \le 4.74006580620091934483000099877771584647 \cdot 10^{-320}:\\
\;\;\;\;\frac{1}{b1 \cdot \frac{\frac{b2}{a2}}{a1}}\\
\mathbf{elif}\;b1 \cdot b2 \le 8.888412293585824693935829272063102395365 \cdot 10^{181}:\\
\;\;\;\;\frac{\frac{1}{\frac{b1 \cdot b2}{\sqrt[3]{a1} \cdot \sqrt[3]{a1}}}}{\frac{\frac{1}{a2}}{\sqrt[3]{a1}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r88649 = a1;
double r88650 = a2;
double r88651 = r88649 * r88650;
double r88652 = b1;
double r88653 = b2;
double r88654 = r88652 * r88653;
double r88655 = r88651 / r88654;
return r88655;
}
double f(double a1, double a2, double b1, double b2) {
double r88656 = b1;
double r88657 = b2;
double r88658 = r88656 * r88657;
double r88659 = -9.786216370120351e+209;
bool r88660 = r88658 <= r88659;
double r88661 = 1.0;
double r88662 = a2;
double r88663 = r88657 / r88662;
double r88664 = a1;
double r88665 = r88663 / r88664;
double r88666 = r88656 * r88665;
double r88667 = r88661 / r88666;
double r88668 = -9.111280530104685e-184;
bool r88669 = r88658 <= r88668;
double r88670 = cbrt(r88664);
double r88671 = r88670 * r88670;
double r88672 = r88658 / r88671;
double r88673 = r88661 / r88672;
double r88674 = r88661 / r88662;
double r88675 = r88674 / r88670;
double r88676 = r88673 / r88675;
double r88677 = 4.7400658062009e-320;
bool r88678 = r88658 <= r88677;
double r88679 = 8.888412293585825e+181;
bool r88680 = r88658 <= r88679;
double r88681 = r88664 / r88656;
double r88682 = r88681 / r88663;
double r88683 = r88680 ? r88676 : r88682;
double r88684 = r88678 ? r88667 : r88683;
double r88685 = r88669 ? r88676 : r88684;
double r88686 = r88660 ? r88667 : r88685;
return r88686;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.6 |
|---|---|
| Target | 11.4 |
| Herbie | 4.6 |
if (* b1 b2) < -9.786216370120351e+209 or -9.111280530104685e-184 < (* b1 b2) < 4.7400658062009e-320Initial program 25.7
rmApplied associate-/l*25.3
rmApplied clear-num25.4
rmApplied *-un-lft-identity25.4
Applied *-un-lft-identity25.4
Applied times-frac12.9
Applied times-frac6.7
Simplified6.7
if -9.786216370120351e+209 < (* b1 b2) < -9.111280530104685e-184 or 4.7400658062009e-320 < (* b1 b2) < 8.888412293585825e+181Initial program 5.2
rmApplied associate-/l*5.2
rmApplied clear-num5.5
rmApplied add-cube-cbrt6.2
Applied div-inv6.2
Applied times-frac3.8
Applied associate-/r*3.7
if 8.888412293585825e+181 < (* b1 b2) Initial program 16.3
rmApplied associate-/l*15.8
rmApplied *-un-lft-identity15.8
Applied times-frac8.8
Applied associate-/r*5.3
Simplified5.3
Final simplification4.6
herbie shell --seed 2019323 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))