\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 = -\infty:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -4.400716313668456 \cdot 10^{-101}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.4490538368871561 \cdot 10^{-99}:\\
\;\;\;\;\frac{1}{b1} \cdot \frac{a1}{\frac{b2}{a2}}\\
\mathbf{elif}\;a1 \cdot a2 \le 3.3810800204304724 \cdot 10^{+304}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r1634421 = a1;
double r1634422 = a2;
double r1634423 = r1634421 * r1634422;
double r1634424 = b1;
double r1634425 = b2;
double r1634426 = r1634424 * r1634425;
double r1634427 = r1634423 / r1634426;
return r1634427;
}
double f(double a1, double a2, double b1, double b2) {
double r1634428 = a1;
double r1634429 = a2;
double r1634430 = r1634428 * r1634429;
double r1634431 = -inf.0;
bool r1634432 = r1634430 <= r1634431;
double r1634433 = b1;
double r1634434 = r1634428 / r1634433;
double r1634435 = b2;
double r1634436 = r1634429 / r1634435;
double r1634437 = r1634434 * r1634436;
double r1634438 = -4.400716313668456e-101;
bool r1634439 = r1634430 <= r1634438;
double r1634440 = r1634430 / r1634433;
double r1634441 = r1634440 / r1634435;
double r1634442 = 1.4490538368871561e-99;
bool r1634443 = r1634430 <= r1634442;
double r1634444 = 1.0;
double r1634445 = r1634444 / r1634433;
double r1634446 = r1634435 / r1634429;
double r1634447 = r1634428 / r1634446;
double r1634448 = r1634445 * r1634447;
double r1634449 = 3.3810800204304724e+304;
bool r1634450 = r1634430 <= r1634449;
double r1634451 = r1634450 ? r1634441 : r1634437;
double r1634452 = r1634443 ? r1634448 : r1634451;
double r1634453 = r1634439 ? r1634441 : r1634452;
double r1634454 = r1634432 ? r1634437 : r1634453;
return r1634454;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 10.8 |
|---|---|
| Target | 11.2 |
| Herbie | 6.8 |
if (* a1 a2) < -inf.0 or 3.3810800204304724e+304 < (* a1 a2) Initial program 59.7
rmApplied times-frac8.9
if -inf.0 < (* a1 a2) < -4.400716313668456e-101 or 1.4490538368871561e-99 < (* a1 a2) < 3.3810800204304724e+304Initial program 5.2
rmApplied associate-/r*5.1
if -4.400716313668456e-101 < (* a1 a2) < 1.4490538368871561e-99Initial program 11.0
rmApplied associate-/l*8.4
rmApplied *-un-lft-identity8.4
Applied times-frac7.1
Applied *-un-lft-identity7.1
Applied times-frac8.4
Simplified8.4
Final simplification6.8
herbie shell --seed 2019155 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))