\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -1.4413717353503713 \cdot 10^{+166}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -7.442078385181948 \cdot 10^{-96}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1} \cdot \frac{1}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 0.0:\\
\;\;\;\;\frac{a1}{\frac{b2 \cdot b1}{a2}}\\
\mathbf{elif}\;a1 \cdot a2 \le 4.15369418345865 \cdot 10^{+157}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1} \cdot \frac{1}{b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{\frac{b2 \cdot b1}{a2}}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r4511086 = a1;
double r4511087 = a2;
double r4511088 = r4511086 * r4511087;
double r4511089 = b1;
double r4511090 = b2;
double r4511091 = r4511089 * r4511090;
double r4511092 = r4511088 / r4511091;
return r4511092;
}
double f(double a1, double a2, double b1, double b2) {
double r4511093 = a1;
double r4511094 = a2;
double r4511095 = r4511093 * r4511094;
double r4511096 = -1.4413717353503713e+166;
bool r4511097 = r4511095 <= r4511096;
double r4511098 = b1;
double r4511099 = r4511093 / r4511098;
double r4511100 = b2;
double r4511101 = r4511094 / r4511100;
double r4511102 = r4511099 * r4511101;
double r4511103 = -7.442078385181948e-96;
bool r4511104 = r4511095 <= r4511103;
double r4511105 = r4511095 / r4511098;
double r4511106 = 1.0;
double r4511107 = r4511106 / r4511100;
double r4511108 = r4511105 * r4511107;
double r4511109 = 0.0;
bool r4511110 = r4511095 <= r4511109;
double r4511111 = r4511100 * r4511098;
double r4511112 = r4511111 / r4511094;
double r4511113 = r4511093 / r4511112;
double r4511114 = 4.15369418345865e+157;
bool r4511115 = r4511095 <= r4511114;
double r4511116 = r4511115 ? r4511108 : r4511113;
double r4511117 = r4511110 ? r4511113 : r4511116;
double r4511118 = r4511104 ? r4511108 : r4511117;
double r4511119 = r4511097 ? r4511102 : r4511118;
return r4511119;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 10.5 |
|---|---|
| Target | 11.4 |
| Herbie | 6.8 |
if (* a1 a2) < -1.4413717353503713e+166Initial program 28.4
rmApplied times-frac11.5
if -1.4413717353503713e+166 < (* a1 a2) < -7.442078385181948e-96 or 0.0 < (* a1 a2) < 4.15369418345865e+157Initial program 4.3
rmApplied associate-/r*4.3
Taylor expanded around inf 4.3
rmApplied div-inv4.4
if -7.442078385181948e-96 < (* a1 a2) < 0.0 or 4.15369418345865e+157 < (* a1 a2) Initial program 15.7
rmApplied associate-/l*9.2
Final simplification6.8
herbie shell --seed 2019104 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))