\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 = -\infty:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;b1 \cdot b2 \le -2.253412862125128 \cdot 10^{-103}:\\
\;\;\;\;\frac{\frac{a1}{b1 \cdot b2}}{\frac{1}{a2}}\\
\mathbf{elif}\;b1 \cdot b2 \le -0.0:\\
\;\;\;\;\frac{a1}{\frac{b2}{a2}} \cdot \frac{1}{b1}\\
\mathbf{elif}\;b1 \cdot b2 \le 1.1528569429778148 \cdot 10^{+56}:\\
\;\;\;\;\frac{a2 \cdot a1}{b1 \cdot b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r2828094 = a1;
double r2828095 = a2;
double r2828096 = r2828094 * r2828095;
double r2828097 = b1;
double r2828098 = b2;
double r2828099 = r2828097 * r2828098;
double r2828100 = r2828096 / r2828099;
return r2828100;
}
double f(double a1, double a2, double b1, double b2) {
double r2828101 = b1;
double r2828102 = b2;
double r2828103 = r2828101 * r2828102;
double r2828104 = -inf.0;
bool r2828105 = r2828103 <= r2828104;
double r2828106 = a1;
double r2828107 = r2828106 / r2828101;
double r2828108 = a2;
double r2828109 = r2828108 / r2828102;
double r2828110 = r2828107 * r2828109;
double r2828111 = -2.253412862125128e-103;
bool r2828112 = r2828103 <= r2828111;
double r2828113 = r2828106 / r2828103;
double r2828114 = 1.0;
double r2828115 = r2828114 / r2828108;
double r2828116 = r2828113 / r2828115;
double r2828117 = -0.0;
bool r2828118 = r2828103 <= r2828117;
double r2828119 = r2828102 / r2828108;
double r2828120 = r2828106 / r2828119;
double r2828121 = r2828114 / r2828101;
double r2828122 = r2828120 * r2828121;
double r2828123 = 1.1528569429778148e+56;
bool r2828124 = r2828103 <= r2828123;
double r2828125 = r2828108 * r2828106;
double r2828126 = r2828125 / r2828103;
double r2828127 = r2828107 / r2828119;
double r2828128 = r2828124 ? r2828126 : r2828127;
double r2828129 = r2828118 ? r2828122 : r2828128;
double r2828130 = r2828112 ? r2828116 : r2828129;
double r2828131 = r2828105 ? r2828110 : r2828130;
return r2828131;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.1 |
|---|---|
| Target | 11.2 |
| Herbie | 6.2 |
if (* b1 b2) < -inf.0Initial program 22.1
rmApplied times-frac1.9
if -inf.0 < (* b1 b2) < -2.253412862125128e-103Initial program 4.7
rmApplied associate-/l*4.4
rmApplied div-inv4.5
Applied associate-/r*4.5
if -2.253412862125128e-103 < (* b1 b2) < -0.0Initial program 28.8
rmApplied associate-/l*27.4
rmApplied *-un-lft-identity27.4
Applied times-frac13.9
Applied *-un-lft-identity13.9
Applied times-frac9.8
Simplified9.8
if -0.0 < (* b1 b2) < 1.1528569429778148e+56Initial program 5.8
rmApplied associate-/l*5.7
Taylor expanded around inf 5.8
if 1.1528569429778148e+56 < (* b1 b2) Initial program 10.3
rmApplied associate-/l*11.0
rmApplied *-un-lft-identity11.0
Applied times-frac9.0
Applied associate-/r*7.8
Simplified7.8
Final simplification6.2
herbie shell --seed 2019151 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))