\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\
\;\;\;\;\frac{1}{b1} \cdot \frac{a1}{\frac{b2}{a2}}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -2.003595208914368741836229683746622301989 \cdot 10^{-314}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -0.0:\\
\;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 2.147754365524637702732728104245539632149 \cdot 10^{211}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r163844 = a1;
double r163845 = a2;
double r163846 = r163844 * r163845;
double r163847 = b1;
double r163848 = b2;
double r163849 = r163847 * r163848;
double r163850 = r163846 / r163849;
return r163850;
}
double f(double a1, double a2, double b1, double b2) {
double r163851 = a1;
double r163852 = a2;
double r163853 = r163851 * r163852;
double r163854 = b1;
double r163855 = b2;
double r163856 = r163854 * r163855;
double r163857 = r163853 / r163856;
double r163858 = -inf.0;
bool r163859 = r163857 <= r163858;
double r163860 = 1.0;
double r163861 = r163860 / r163854;
double r163862 = r163855 / r163852;
double r163863 = r163851 / r163862;
double r163864 = r163861 * r163863;
double r163865 = -2.0035952089144e-314;
bool r163866 = r163857 <= r163865;
double r163867 = -0.0;
bool r163868 = r163857 <= r163867;
double r163869 = r163851 / r163854;
double r163870 = r163869 / r163862;
double r163871 = 2.1477543655246377e+211;
bool r163872 = r163857 <= r163871;
double r163873 = r163872 ? r163857 : r163870;
double r163874 = r163868 ? r163870 : r163873;
double r163875 = r163866 ? r163857 : r163874;
double r163876 = r163859 ? r163864 : r163875;
return r163876;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.1 |
|---|---|
| Target | 11.3 |
| Herbie | 3.0 |
if (/ (* a1 a2) (* b1 b2)) < -inf.0Initial program 64.0
rmApplied associate-/l*30.6
rmApplied *-un-lft-identity30.6
Applied times-frac16.0
Applied *-un-lft-identity16.0
Applied times-frac16.3
Simplified16.3
if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -2.0035952089144e-314 or -0.0 < (/ (* a1 a2) (* b1 b2)) < 2.1477543655246377e+211Initial program 3.5
if -2.0035952089144e-314 < (/ (* a1 a2) (* b1 b2)) < -0.0 or 2.1477543655246377e+211 < (/ (* a1 a2) (* b1 b2)) Initial program 25.3
rmApplied associate-/l*19.4
rmApplied *-un-lft-identity19.4
Applied times-frac9.5
Applied associate-/r*6.2
Simplified6.2
Final simplification3.0
herbie shell --seed 2019318
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))