\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -2.1038078135654004 \cdot 10^{+219}:\\
\;\;\;\;\frac{a1 \cdot \frac{a2}{b1}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -9.013586456865108 \cdot 10^{-95}:\\
\;\;\;\;\frac{1}{\frac{b2 \cdot b1}{a1 \cdot a2}}\\
\mathbf{elif}\;a1 \cdot a2 \le -2.1062713645792236 \cdot 10^{-164}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 7.866668139775074 \cdot 10^{-256}:\\
\;\;\;\;\frac{a2}{b2} \cdot \frac{a1}{b1}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.2752046247109955 \cdot 10^{+283}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a2}{b2} \cdot \frac{a1}{b1}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r6075466 = a1;
double r6075467 = a2;
double r6075468 = r6075466 * r6075467;
double r6075469 = b1;
double r6075470 = b2;
double r6075471 = r6075469 * r6075470;
double r6075472 = r6075468 / r6075471;
return r6075472;
}
double f(double a1, double a2, double b1, double b2) {
double r6075473 = a1;
double r6075474 = a2;
double r6075475 = r6075473 * r6075474;
double r6075476 = -2.1038078135654004e+219;
bool r6075477 = r6075475 <= r6075476;
double r6075478 = b1;
double r6075479 = r6075474 / r6075478;
double r6075480 = r6075473 * r6075479;
double r6075481 = b2;
double r6075482 = r6075480 / r6075481;
double r6075483 = -9.013586456865108e-95;
bool r6075484 = r6075475 <= r6075483;
double r6075485 = 1.0;
double r6075486 = r6075481 * r6075478;
double r6075487 = r6075486 / r6075475;
double r6075488 = r6075485 / r6075487;
double r6075489 = -2.1062713645792236e-164;
bool r6075490 = r6075475 <= r6075489;
double r6075491 = r6075475 / r6075478;
double r6075492 = r6075491 / r6075481;
double r6075493 = 7.866668139775074e-256;
bool r6075494 = r6075475 <= r6075493;
double r6075495 = r6075474 / r6075481;
double r6075496 = r6075473 / r6075478;
double r6075497 = r6075495 * r6075496;
double r6075498 = 1.2752046247109955e+283;
bool r6075499 = r6075475 <= r6075498;
double r6075500 = r6075499 ? r6075492 : r6075497;
double r6075501 = r6075494 ? r6075497 : r6075500;
double r6075502 = r6075490 ? r6075492 : r6075501;
double r6075503 = r6075484 ? r6075488 : r6075502;
double r6075504 = r6075477 ? r6075482 : r6075503;
return r6075504;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.1 |
|---|---|
| Target | 11.4 |
| Herbie | 5.5 |
if (* a1 a2) < -2.1038078135654004e+219Initial program 36.9
rmApplied associate-/r*35.8
rmApplied *-un-lft-identity35.8
Applied times-frac16.9
Simplified16.9
if -2.1038078135654004e+219 < (* a1 a2) < -9.013586456865108e-95Initial program 3.9
rmApplied clear-num4.1
if -9.013586456865108e-95 < (* a1 a2) < -2.1062713645792236e-164 or 7.866668139775074e-256 < (* a1 a2) < 1.2752046247109955e+283Initial program 5.4
rmApplied associate-/r*4.7
if -2.1062713645792236e-164 < (* a1 a2) < 7.866668139775074e-256 or 1.2752046247109955e+283 < (* a1 a2) Initial program 18.7
rmApplied times-frac5.2
Final simplification5.5
herbie shell --seed 2019163 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))