\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -4.635198921460311 \cdot 10^{+222}:\\
\;\;\;\;\frac{a2}{b1} \cdot \frac{a1}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -4.151349519826297 \cdot 10^{-252}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b2}}{b1}\\
\mathbf{elif}\;a1 \cdot a2 \le 2.5035993978499362 \cdot 10^{-275}:\\
\;\;\;\;\frac{a2}{b1} \cdot \frac{a1}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.2588973641699893 \cdot 10^{+212}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b2}}{b1}\\
\mathbf{else}:\\
\;\;\;\;\frac{a2}{b1} \cdot \frac{a1}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r5831869 = a1;
double r5831870 = a2;
double r5831871 = r5831869 * r5831870;
double r5831872 = b1;
double r5831873 = b2;
double r5831874 = r5831872 * r5831873;
double r5831875 = r5831871 / r5831874;
return r5831875;
}
double f(double a1, double a2, double b1, double b2) {
double r5831876 = a1;
double r5831877 = a2;
double r5831878 = r5831876 * r5831877;
double r5831879 = -4.635198921460311e+222;
bool r5831880 = r5831878 <= r5831879;
double r5831881 = b1;
double r5831882 = r5831877 / r5831881;
double r5831883 = b2;
double r5831884 = r5831876 / r5831883;
double r5831885 = r5831882 * r5831884;
double r5831886 = -4.151349519826297e-252;
bool r5831887 = r5831878 <= r5831886;
double r5831888 = r5831878 / r5831883;
double r5831889 = r5831888 / r5831881;
double r5831890 = 2.5035993978499362e-275;
bool r5831891 = r5831878 <= r5831890;
double r5831892 = 1.2588973641699893e+212;
bool r5831893 = r5831878 <= r5831892;
double r5831894 = r5831893 ? r5831889 : r5831885;
double r5831895 = r5831891 ? r5831885 : r5831894;
double r5831896 = r5831887 ? r5831889 : r5831895;
double r5831897 = r5831880 ? r5831885 : r5831896;
return r5831897;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.2 |
|---|---|
| Target | 11.1 |
| Herbie | 5.3 |
if (* a1 a2) < -4.635198921460311e+222 or -4.151349519826297e-252 < (* a1 a2) < 2.5035993978499362e-275 or 1.2588973641699893e+212 < (* a1 a2) Initial program 25.0
rmApplied times-frac5.5
rmApplied associate-*l/11.6
rmApplied div-inv11.6
rmApplied pow111.6
Applied pow111.6
Applied pow-prod-down11.6
Simplified6.3
if -4.635198921460311e+222 < (* a1 a2) < -4.151349519826297e-252 or 2.5035993978499362e-275 < (* a1 a2) < 1.2588973641699893e+212Initial program 4.6
rmApplied times-frac13.8
rmApplied associate-*l/11.0
Taylor expanded around 0 4.8
Final simplification5.3
herbie shell --seed 2019133 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))