\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\
\;\;\;\;\frac{a1 \cdot \frac{a2}{b2}}{b1}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -8.843324609247471005376211875053257441102 \cdot 10^{-307}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -0.0:\\
\;\;\;\;\frac{a1 \cdot \frac{a2}{b2}}{b1}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.464542161086205916851616380334111321007 \cdot 10^{288}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{a1}{b1} \cdot a2}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r127592 = a1;
double r127593 = a2;
double r127594 = r127592 * r127593;
double r127595 = b1;
double r127596 = b2;
double r127597 = r127595 * r127596;
double r127598 = r127594 / r127597;
return r127598;
}
double f(double a1, double a2, double b1, double b2) {
double r127599 = a1;
double r127600 = a2;
double r127601 = r127599 * r127600;
double r127602 = b1;
double r127603 = b2;
double r127604 = r127602 * r127603;
double r127605 = r127601 / r127604;
double r127606 = -inf.0;
bool r127607 = r127605 <= r127606;
double r127608 = r127600 / r127603;
double r127609 = r127599 * r127608;
double r127610 = r127609 / r127602;
double r127611 = -8.843324609247471e-307;
bool r127612 = r127605 <= r127611;
double r127613 = -0.0;
bool r127614 = r127605 <= r127613;
double r127615 = 1.464542161086206e+288;
bool r127616 = r127605 <= r127615;
double r127617 = r127599 / r127602;
double r127618 = r127617 * r127600;
double r127619 = r127618 / r127603;
double r127620 = r127616 ? r127605 : r127619;
double r127621 = r127614 ? r127610 : r127620;
double r127622 = r127612 ? r127605 : r127621;
double r127623 = r127607 ? r127610 : r127622;
return r127623;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.3 |
|---|---|
| Target | 10.9 |
| Herbie | 3.1 |
if (/ (* a1 a2) (* b1 b2)) < -inf.0 or -8.843324609247471e-307 < (/ (* a1 a2) (* b1 b2)) < -0.0Initial program 18.3
rmApplied times-frac3.3
rmApplied associate-*l/4.7
if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -8.843324609247471e-307 or -0.0 < (/ (* a1 a2) (* b1 b2)) < 1.464542161086206e+288Initial program 0.8
rmApplied times-frac16.0
rmApplied div-inv16.1
Applied associate-*r*14.6
rmApplied un-div-inv14.6
rmApplied associate-*l/8.1
Applied associate-/l/0.8
Simplified0.8
if 1.464542161086206e+288 < (/ (* a1 a2) (* b1 b2)) Initial program 59.6
rmApplied times-frac7.2
rmApplied div-inv7.3
Applied associate-*r*13.1
rmApplied un-div-inv13.1
Final simplification3.1
herbie shell --seed 2019326
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))