\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -8.29796578676969 \cdot 10^{+222}:\\
\;\;\;\;\frac{a1}{\frac{b2}{a2} \cdot b1}\\
\mathbf{elif}\;a1 \cdot a2 \le -2.7996586332702162 \cdot 10^{-300}:\\
\;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{1}{b1 \cdot b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 4.824187060576902 \cdot 10^{-170}:\\
\;\;\;\;\frac{a2}{b2} \cdot \frac{1}{\frac{b1}{a1}}\\
\mathbf{elif}\;a1 \cdot a2 \le 5.314779618615164 \cdot 10^{+173}:\\
\;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{1}{b1 \cdot b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{\frac{b2}{a2} \cdot b1}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r7338443 = a1;
double r7338444 = a2;
double r7338445 = r7338443 * r7338444;
double r7338446 = b1;
double r7338447 = b2;
double r7338448 = r7338446 * r7338447;
double r7338449 = r7338445 / r7338448;
return r7338449;
}
double f(double a1, double a2, double b1, double b2) {
double r7338450 = a1;
double r7338451 = a2;
double r7338452 = r7338450 * r7338451;
double r7338453 = -8.29796578676969e+222;
bool r7338454 = r7338452 <= r7338453;
double r7338455 = b2;
double r7338456 = r7338455 / r7338451;
double r7338457 = b1;
double r7338458 = r7338456 * r7338457;
double r7338459 = r7338450 / r7338458;
double r7338460 = -2.7996586332702162e-300;
bool r7338461 = r7338452 <= r7338460;
double r7338462 = 1.0;
double r7338463 = r7338457 * r7338455;
double r7338464 = r7338462 / r7338463;
double r7338465 = r7338452 * r7338464;
double r7338466 = 4.824187060576902e-170;
bool r7338467 = r7338452 <= r7338466;
double r7338468 = r7338451 / r7338455;
double r7338469 = r7338457 / r7338450;
double r7338470 = r7338462 / r7338469;
double r7338471 = r7338468 * r7338470;
double r7338472 = 5.314779618615164e+173;
bool r7338473 = r7338452 <= r7338472;
double r7338474 = r7338473 ? r7338465 : r7338459;
double r7338475 = r7338467 ? r7338471 : r7338474;
double r7338476 = r7338461 ? r7338465 : r7338475;
double r7338477 = r7338454 ? r7338459 : r7338476;
return r7338477;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.2 |
|---|---|
| Target | 11.1 |
| Herbie | 5.6 |
if (* a1 a2) < -8.29796578676969e+222 or 5.314779618615164e+173 < (* a1 a2) Initial program 35.1
rmApplied associate-/l*19.1
rmApplied *-un-lft-identity19.1
Applied times-frac10.9
Simplified10.9
if -8.29796578676969e+222 < (* a1 a2) < -2.7996586332702162e-300 or 4.824187060576902e-170 < (* a1 a2) < 5.314779618615164e+173Initial program 4.5
rmApplied div-inv4.8
if -2.7996586332702162e-300 < (* a1 a2) < 4.824187060576902e-170Initial program 15.3
rmApplied clear-num15.4
rmApplied times-frac5.0
Applied add-cube-cbrt5.0
Applied times-frac4.7
Simplified4.7
Simplified4.6
Final simplification5.6
herbie shell --seed 2019165 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))