\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{1}{b2 \cdot \frac{b1}{a1 \cdot a2}}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.96356509626686614052093735349617220019 \cdot 10^{-319}:\\
\;\;\;\;\frac{a1}{\frac{b2 \cdot b1}{a2}}\\
\mathbf{elif}\;a1 \cdot a2 \le 9.281447287153549320457976819327732070409 \cdot 10^{192}:\\
\;\;\;\;\frac{1}{b2} \cdot \frac{a1 \cdot a2}{b1}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r6041016 = a1;
double r6041017 = a2;
double r6041018 = r6041016 * r6041017;
double r6041019 = b1;
double r6041020 = b2;
double r6041021 = r6041019 * r6041020;
double r6041022 = r6041018 / r6041021;
return r6041022;
}
double f(double a1, double a2, double b1, double b2) {
double r6041023 = a1;
double r6041024 = a2;
double r6041025 = r6041023 * r6041024;
double r6041026 = -1.1007218269079999e+269;
bool r6041027 = r6041025 <= r6041026;
double r6041028 = b1;
double r6041029 = r6041023 / r6041028;
double r6041030 = b2;
double r6041031 = r6041024 / r6041030;
double r6041032 = r6041029 * r6041031;
double r6041033 = -3.490501632300148e-197;
bool r6041034 = r6041025 <= r6041033;
double r6041035 = 1.0;
double r6041036 = r6041028 / r6041025;
double r6041037 = r6041030 * r6041036;
double r6041038 = r6041035 / r6041037;
double r6041039 = 1.9635650962669e-319;
bool r6041040 = r6041025 <= r6041039;
double r6041041 = r6041030 * r6041028;
double r6041042 = r6041041 / r6041024;
double r6041043 = r6041023 / r6041042;
double r6041044 = 9.28144728715355e+192;
bool r6041045 = r6041025 <= r6041044;
double r6041046 = r6041035 / r6041030;
double r6041047 = r6041025 / r6041028;
double r6041048 = r6041046 * r6041047;
double r6041049 = r6041045 ? r6041048 : r6041032;
double r6041050 = r6041040 ? r6041043 : r6041049;
double r6041051 = r6041034 ? r6041038 : r6041050;
double r6041052 = r6041027 ? r6041032 : r6041051;
return r6041052;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.5 |
|---|---|
| Target | 11.3 |
| Herbie | 6.3 |
if (* a1 a2) < -1.1007218269079999e+269 or 9.28144728715355e+192 < (* a1 a2) Initial program 39.2
rmApplied times-frac10.4
if -1.1007218269079999e+269 < (* a1 a2) < -3.490501632300148e-197Initial program 4.9
rmApplied associate-/r*4.7
rmApplied clear-num5.0
rmApplied associate-/l/5.1
if -3.490501632300148e-197 < (* a1 a2) < 1.9635650962669e-319Initial program 17.2
rmApplied associate-/l*8.3
if 1.9635650962669e-319 < (* a1 a2) < 9.28144728715355e+192Initial program 5.2
rmApplied associate-/r*4.9
rmApplied div-inv4.9
Final simplification6.3
herbie shell --seed 2019192
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))