\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\
\;\;\;\;\frac{1}{b1} \cdot \frac{a1}{\frac{b2}{a2}}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -1.78460431200051311865071854770673924004 \cdot 10^{-282}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0:\\
\;\;\;\;\frac{1}{b1} \cdot \frac{a1}{\frac{b2}{a2}}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 2.397032039407073387947567697695123600538 \cdot 10^{295}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{else}:\\
\;\;\;\;a1 \cdot \frac{\frac{a2}{b2}}{b1}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r12452054 = a1;
double r12452055 = a2;
double r12452056 = r12452054 * r12452055;
double r12452057 = b1;
double r12452058 = b2;
double r12452059 = r12452057 * r12452058;
double r12452060 = r12452056 / r12452059;
return r12452060;
}
double f(double a1, double a2, double b1, double b2) {
double r12452061 = a1;
double r12452062 = a2;
double r12452063 = r12452061 * r12452062;
double r12452064 = b1;
double r12452065 = b2;
double r12452066 = r12452064 * r12452065;
double r12452067 = r12452063 / r12452066;
double r12452068 = -inf.0;
bool r12452069 = r12452067 <= r12452068;
double r12452070 = 1.0;
double r12452071 = r12452070 / r12452064;
double r12452072 = r12452065 / r12452062;
double r12452073 = r12452061 / r12452072;
double r12452074 = r12452071 * r12452073;
double r12452075 = -1.784604312000513e-282;
bool r12452076 = r12452067 <= r12452075;
double r12452077 = 0.0;
bool r12452078 = r12452067 <= r12452077;
double r12452079 = 2.3970320394070734e+295;
bool r12452080 = r12452067 <= r12452079;
double r12452081 = r12452062 / r12452065;
double r12452082 = r12452081 / r12452064;
double r12452083 = r12452061 * r12452082;
double r12452084 = r12452080 ? r12452067 : r12452083;
double r12452085 = r12452078 ? r12452074 : r12452084;
double r12452086 = r12452076 ? r12452067 : r12452085;
double r12452087 = r12452069 ? r12452074 : r12452086;
return r12452087;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.4 |
|---|---|
| Target | 11.1 |
| Herbie | 3.1 |
if (/ (* a1 a2) (* b1 b2)) < -inf.0 or -1.784604312000513e-282 < (/ (* a1 a2) (* b1 b2)) < 0.0Initial program 18.2
rmApplied associate-/l*9.7
rmApplied *-un-lft-identity9.7
Applied times-frac5.5
Applied *-un-lft-identity5.5
Applied times-frac4.8
Simplified4.8
if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -1.784604312000513e-282 or 0.0 < (/ (* a1 a2) (* b1 b2)) < 2.3970320394070734e+295Initial program 0.7
if 2.3970320394070734e+295 < (/ (* a1 a2) (* b1 b2)) Initial program 61.5
rmApplied associate-/l*46.3
Taylor expanded around 0 46.3
rmApplied div-inv46.5
Simplified13.4
Final simplification3.1
herbie shell --seed 2019173 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))