\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\
\;\;\;\;\frac{\frac{a1}{\frac{b1}{a2}}}{b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -4.745059537242826286535958821741347182896 \cdot 10^{-303} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0\right) \land \frac{a1 \cdot a2}{b1 \cdot b2} \le 2.40570977703653435845644876242709169342 \cdot 10^{293}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a2}{b1} \cdot \frac{a1}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r160183 = a1;
double r160184 = a2;
double r160185 = r160183 * r160184;
double r160186 = b1;
double r160187 = b2;
double r160188 = r160186 * r160187;
double r160189 = r160185 / r160188;
return r160189;
}
double f(double a1, double a2, double b1, double b2) {
double r160190 = a1;
double r160191 = a2;
double r160192 = r160190 * r160191;
double r160193 = b1;
double r160194 = b2;
double r160195 = r160193 * r160194;
double r160196 = r160192 / r160195;
double r160197 = -inf.0;
bool r160198 = r160196 <= r160197;
double r160199 = r160193 / r160191;
double r160200 = r160190 / r160199;
double r160201 = r160200 / r160194;
double r160202 = -4.745059537242826e-303;
bool r160203 = r160196 <= r160202;
double r160204 = 0.0;
bool r160205 = r160196 <= r160204;
double r160206 = !r160205;
double r160207 = 2.4057097770365344e+293;
bool r160208 = r160196 <= r160207;
bool r160209 = r160206 && r160208;
bool r160210 = r160203 || r160209;
double r160211 = r160191 / r160193;
double r160212 = r160190 / r160194;
double r160213 = r160211 * r160212;
double r160214 = r160210 ? r160196 : r160213;
double r160215 = r160198 ? r160201 : r160214;
return r160215;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.7 |
|---|---|
| Target | 11.4 |
| Herbie | 2.4 |
if (/ (* a1 a2) (* b1 b2)) < -inf.0Initial program 64.0
rmApplied associate-/r*34.1
Simplified16.3
if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -4.745059537242826e-303 or 0.0 < (/ (* a1 a2) (* b1 b2)) < 2.4057097770365344e+293Initial program 3.6
if -4.745059537242826e-303 < (/ (* a1 a2) (* b1 b2)) < 0.0 or 2.4057097770365344e+293 < (/ (* a1 a2) (* b1 b2)) Initial program 29.1
rmApplied times-frac3.9
rmApplied *-un-lft-identity3.9
Applied add-cube-cbrt4.3
Applied times-frac4.3
Applied associate-*r*5.0
Simplified13.2
Taylor expanded around 0 29.1
Simplified4.5
Final simplification2.4
herbie shell --seed 2019196
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))