\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\
\;\;\;\;a1 \cdot \frac{\frac{a2}{b2}}{b1}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -1.414144362639176854803385722786278913018 \cdot 10^{-314} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0\right) \land \frac{a1 \cdot a2}{b1 \cdot b2} \le 1.431802419250923180709933384670076216432 \cdot 10^{298}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r82292 = a1;
double r82293 = a2;
double r82294 = r82292 * r82293;
double r82295 = b1;
double r82296 = b2;
double r82297 = r82295 * r82296;
double r82298 = r82294 / r82297;
return r82298;
}
double f(double a1, double a2, double b1, double b2) {
double r82299 = a1;
double r82300 = a2;
double r82301 = r82299 * r82300;
double r82302 = b1;
double r82303 = b2;
double r82304 = r82302 * r82303;
double r82305 = r82301 / r82304;
double r82306 = -inf.0;
bool r82307 = r82305 <= r82306;
double r82308 = r82300 / r82303;
double r82309 = r82308 / r82302;
double r82310 = r82299 * r82309;
double r82311 = -1.4141443626392e-314;
bool r82312 = r82305 <= r82311;
double r82313 = 0.0;
bool r82314 = r82305 <= r82313;
double r82315 = !r82314;
double r82316 = 1.4318024192509232e+298;
bool r82317 = r82305 <= r82316;
bool r82318 = r82315 && r82317;
bool r82319 = r82312 || r82318;
double r82320 = r82299 / r82302;
double r82321 = r82320 * r82308;
double r82322 = r82319 ? r82305 : r82321;
double r82323 = r82307 ? r82310 : r82322;
return r82323;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.3 |
|---|---|
| Target | 11.2 |
| Herbie | 2.4 |
if (/ (* a1 a2) (* b1 b2)) < -inf.0Initial program 64.0
rmApplied times-frac11.2
rmApplied div-inv11.3
Applied associate-*l*19.0
Simplified18.9
if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -1.4141443626392e-314 or 0.0 < (/ (* a1 a2) (* b1 b2)) < 1.4318024192509232e+298Initial program 0.9
if -1.4141443626392e-314 < (/ (* a1 a2) (* b1 b2)) < 0.0 or 1.4318024192509232e+298 < (/ (* a1 a2) (* b1 b2)) Initial program 22.7
rmApplied times-frac3.2
Final simplification2.4
herbie shell --seed 2019325
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))