\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\
\;\;\;\;\frac{a1}{\frac{b1}{\frac{a2}{b2}}}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -1.510660628541362523085079504704820761096 \cdot 10^{-304}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0:\\
\;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.658174826189562104084513448440762983031 \cdot 10^{285}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{\frac{b1}{\frac{a2}{b2}}}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r5293819 = a1;
double r5293820 = a2;
double r5293821 = r5293819 * r5293820;
double r5293822 = b1;
double r5293823 = b2;
double r5293824 = r5293822 * r5293823;
double r5293825 = r5293821 / r5293824;
return r5293825;
}
double f(double a1, double a2, double b1, double b2) {
double r5293826 = a1;
double r5293827 = a2;
double r5293828 = r5293826 * r5293827;
double r5293829 = b1;
double r5293830 = b2;
double r5293831 = r5293829 * r5293830;
double r5293832 = r5293828 / r5293831;
double r5293833 = -inf.0;
bool r5293834 = r5293832 <= r5293833;
double r5293835 = r5293827 / r5293830;
double r5293836 = r5293829 / r5293835;
double r5293837 = r5293826 / r5293836;
double r5293838 = -1.5106606285413625e-304;
bool r5293839 = r5293832 <= r5293838;
double r5293840 = 0.0;
bool r5293841 = r5293832 <= r5293840;
double r5293842 = r5293827 / r5293829;
double r5293843 = r5293842 / r5293830;
double r5293844 = r5293826 * r5293843;
double r5293845 = 1.658174826189562e+285;
bool r5293846 = r5293832 <= r5293845;
double r5293847 = r5293846 ? r5293832 : r5293837;
double r5293848 = r5293841 ? r5293844 : r5293847;
double r5293849 = r5293839 ? r5293832 : r5293848;
double r5293850 = r5293834 ? r5293837 : r5293849;
return r5293850;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.4 |
|---|---|
| Target | 11.1 |
| Herbie | 3.3 |
if (/ (* a1 a2) (* b1 b2)) < -inf.0 or 1.658174826189562e+285 < (/ (* a1 a2) (* b1 b2)) Initial program 60.8
rmApplied associate-/l*40.4
rmApplied associate-/l*13.7
if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -1.5106606285413625e-304 or 0.0 < (/ (* a1 a2) (* b1 b2)) < 1.658174826189562e+285Initial program 0.9
if -1.5106606285413625e-304 < (/ (* a1 a2) (* b1 b2)) < 0.0Initial program 13.2
rmApplied associate-/r*5.9
rmApplied *-un-lft-identity5.9
Applied *-un-lft-identity5.9
Applied times-frac3.2
Applied times-frac3.9
Simplified3.9
Final simplification3.3
herbie shell --seed 2019174 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))