\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -1.100721826907999911467992266722832772944 \cdot 10^{269}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -3.49050163230014819970050953927807740633 \cdot 10^{-197}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1} \cdot \frac{1}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 4.475784744408438094636863798469716860556 \cdot 10^{-83}:\\
\;\;\;\;\frac{a1}{\frac{b2}{\frac{a2}{b1}}}\\
\mathbf{elif}\;a1 \cdot a2 \le 6.099192957207017609535814106210005852322 \cdot 10^{243}:\\
\;\;\;\;\frac{a1 \cdot a2}{b2 \cdot b1}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r5654041 = a1;
double r5654042 = a2;
double r5654043 = r5654041 * r5654042;
double r5654044 = b1;
double r5654045 = b2;
double r5654046 = r5654044 * r5654045;
double r5654047 = r5654043 / r5654046;
return r5654047;
}
double f(double a1, double a2, double b1, double b2) {
double r5654048 = a1;
double r5654049 = a2;
double r5654050 = r5654048 * r5654049;
double r5654051 = -1.1007218269079999e+269;
bool r5654052 = r5654050 <= r5654051;
double r5654053 = b1;
double r5654054 = r5654048 / r5654053;
double r5654055 = b2;
double r5654056 = r5654049 / r5654055;
double r5654057 = r5654054 * r5654056;
double r5654058 = -3.490501632300148e-197;
bool r5654059 = r5654050 <= r5654058;
double r5654060 = r5654050 / r5654053;
double r5654061 = 1.0;
double r5654062 = r5654061 / r5654055;
double r5654063 = r5654060 * r5654062;
double r5654064 = 4.475784744408438e-83;
bool r5654065 = r5654050 <= r5654064;
double r5654066 = r5654049 / r5654053;
double r5654067 = r5654055 / r5654066;
double r5654068 = r5654048 / r5654067;
double r5654069 = 6.0991929572070176e+243;
bool r5654070 = r5654050 <= r5654069;
double r5654071 = r5654055 * r5654053;
double r5654072 = r5654050 / r5654071;
double r5654073 = r5654070 ? r5654072 : r5654057;
double r5654074 = r5654065 ? r5654068 : r5654073;
double r5654075 = r5654059 ? r5654063 : r5654074;
double r5654076 = r5654052 ? r5654057 : r5654075;
return r5654076;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.5 |
|---|---|
| Target | 11.3 |
| Herbie | 5.7 |
if (* a1 a2) < -1.1007218269079999e+269 or 6.0991929572070176e+243 < (* a1 a2) Initial program 46.1
rmApplied times-frac10.3
if -1.1007218269079999e+269 < (* a1 a2) < -3.490501632300148e-197Initial program 4.9
rmApplied associate-/r*4.7
rmApplied div-inv4.8
if -3.490501632300148e-197 < (* a1 a2) < 4.475784744408438e-83Initial program 12.9
rmApplied associate-/r*12.5
rmApplied *-un-lft-identity12.5
Applied times-frac8.0
Applied associate-/l*6.0
if 4.475784744408438e-83 < (* a1 a2) < 6.0991929572070176e+243Initial program 4.9
rmApplied associate-/r*4.5
rmApplied clear-num4.8
Taylor expanded around 0 4.9
Final simplification5.7
herbie shell --seed 2019192 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))