\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 r79346 = a1;
double r79347 = a2;
double r79348 = r79346 * r79347;
double r79349 = b1;
double r79350 = b2;
double r79351 = r79349 * r79350;
double r79352 = r79348 / r79351;
return r79352;
}
double f(double a1, double a2, double b1, double b2) {
double r79353 = a1;
double r79354 = a2;
double r79355 = r79353 * r79354;
double r79356 = b1;
double r79357 = b2;
double r79358 = r79356 * r79357;
double r79359 = r79355 / r79358;
double r79360 = -inf.0;
bool r79361 = r79359 <= r79360;
double r79362 = r79354 / r79357;
double r79363 = r79362 / r79356;
double r79364 = r79353 * r79363;
double r79365 = -1.4141443626392e-314;
bool r79366 = r79359 <= r79365;
double r79367 = 0.0;
bool r79368 = r79359 <= r79367;
double r79369 = !r79368;
double r79370 = 1.4318024192509232e+298;
bool r79371 = r79359 <= r79370;
bool r79372 = r79369 && r79371;
bool r79373 = r79366 || r79372;
double r79374 = r79353 / r79356;
double r79375 = r79374 * r79362;
double r79376 = r79373 ? r79359 : r79375;
double r79377 = r79361 ? r79364 : r79376;
return r79377;
}




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 3.6
if -1.4141443626392e-314 < (/ (* a1 a2) (* b1 b2)) < 0.0 or 1.4318024192509232e+298 < (/ (* a1 a2) (* b1 b2)) Initial program 28.6
rmApplied times-frac3.7
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)))