\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 r151039 = a1;
double r151040 = a2;
double r151041 = r151039 * r151040;
double r151042 = b1;
double r151043 = b2;
double r151044 = r151042 * r151043;
double r151045 = r151041 / r151044;
return r151045;
}
double f(double a1, double a2, double b1, double b2) {
double r151046 = a1;
double r151047 = a2;
double r151048 = r151046 * r151047;
double r151049 = b1;
double r151050 = b2;
double r151051 = r151049 * r151050;
double r151052 = r151048 / r151051;
double r151053 = -inf.0;
bool r151054 = r151052 <= r151053;
double r151055 = -4.2602034138658774e-231;
bool r151056 = r151052 <= r151055;
double r151057 = 7.1004747480539075e-168;
bool r151058 = r151052 <= r151057;
double r151059 = 3.708342445349794e+294;
bool r151060 = r151052 <= r151059;
double r151061 = !r151060;
bool r151062 = r151058 || r151061;
double r151063 = !r151062;
bool r151064 = r151056 || r151063;
double r151065 = !r151064;
bool r151066 = r151054 || r151065;
double r151067 = r151046 / r151049;
double r151068 = r151047 / r151050;
double r151069 = r151067 * r151068;
double r151070 = r151066 ? r151069 : r151052;
return r151070;
}




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
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))