\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le -4.2602034138658774 \cdot 10^{-231} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le 7.10047474805390751 \cdot 10^{-168} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le 3.70834244534979421 \cdot 10^{294}\right)\right)\right):\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r178845 = a1;
double r178846 = a2;
double r178847 = r178845 * r178846;
double r178848 = b1;
double r178849 = b2;
double r178850 = r178848 * r178849;
double r178851 = r178847 / r178850;
return r178851;
}
double f(double a1, double a2, double b1, double b2) {
double r178852 = a1;
double r178853 = a2;
double r178854 = r178852 * r178853;
double r178855 = b1;
double r178856 = b2;
double r178857 = r178855 * r178856;
double r178858 = r178854 / r178857;
double r178859 = -inf.0;
bool r178860 = r178858 <= r178859;
double r178861 = -4.2602034138658774e-231;
bool r178862 = r178858 <= r178861;
double r178863 = 7.1004747480539075e-168;
bool r178864 = r178858 <= r178863;
double r178865 = 3.708342445349794e+294;
bool r178866 = r178858 <= r178865;
double r178867 = !r178866;
bool r178868 = r178864 || r178867;
double r178869 = !r178868;
bool r178870 = r178862 || r178869;
double r178871 = !r178870;
bool r178872 = r178860 || r178871;
double r178873 = r178852 / r178855;
double r178874 = r178853 / r178856;
double r178875 = r178873 * r178874;
double r178876 = r178872 ? r178875 : r178858;
return r178876;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.5 |
|---|---|
| Target | 11.5 |
| Herbie | 3.8 |
if (/ (* a1 a2) (* b1 b2)) < -inf.0 or -4.2602034138658774e-231 < (/ (* a1 a2) (* b1 b2)) < 7.1004747480539075e-168 or 3.708342445349794e+294 < (/ (* a1 a2) (* b1 b2)) Initial program 21.8
rmApplied times-frac6.7
if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -4.2602034138658774e-231 or 7.1004747480539075e-168 < (/ (* a1 a2) (* b1 b2)) < 3.708342445349794e+294Initial program 0.8
Final simplification3.8
herbie shell --seed 2020083 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))