\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -9.782499787656681574696062098790783172828 \cdot 10^{-322}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.421277284710987870204738960879832034274 \cdot 10^{-315}:\\
\;\;\;\;\frac{\frac{a1}{b2}}{b1} \cdot a2\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 2.286175403506427577716209346328092058444 \cdot 10^{301}:\\
\;\;\;\;\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 r76639 = a1;
double r76640 = a2;
double r76641 = r76639 * r76640;
double r76642 = b1;
double r76643 = b2;
double r76644 = r76642 * r76643;
double r76645 = r76641 / r76644;
return r76645;
}
double f(double a1, double a2, double b1, double b2) {
double r76646 = a1;
double r76647 = a2;
double r76648 = r76646 * r76647;
double r76649 = b1;
double r76650 = b2;
double r76651 = r76649 * r76650;
double r76652 = r76648 / r76651;
double r76653 = -inf.0;
bool r76654 = r76652 <= r76653;
double r76655 = r76646 / r76649;
double r76656 = r76647 / r76650;
double r76657 = r76655 * r76656;
double r76658 = -9.7824997876567e-322;
bool r76659 = r76652 <= r76658;
double r76660 = 1.421277284711e-315;
bool r76661 = r76652 <= r76660;
double r76662 = r76646 / r76650;
double r76663 = r76662 / r76649;
double r76664 = r76663 * r76647;
double r76665 = 2.2861754035064276e+301;
bool r76666 = r76652 <= r76665;
double r76667 = r76666 ? r76652 : r76657;
double r76668 = r76661 ? r76664 : r76667;
double r76669 = r76659 ? r76652 : r76668;
double r76670 = r76654 ? r76657 : r76669;
return r76670;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.6 |
|---|---|
| Target | 11.4 |
| Herbie | 2.7 |
if (/ (* a1 a2) (* b1 b2)) < -inf.0 or 2.2861754035064276e+301 < (/ (* a1 a2) (* b1 b2)) Initial program 62.7
rmApplied times-frac9.3
if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -9.7824997876567e-322 or 1.421277284711e-315 < (/ (* a1 a2) (* b1 b2)) < 2.2861754035064276e+301Initial program 0.9
rmApplied associate-/l*8.3
rmApplied *-un-lft-identity8.3
Applied times-frac14.7
Applied *-un-lft-identity14.7
Applied times-frac14.5
Simplified14.5
Simplified14.5
rmApplied *-un-lft-identity14.5
Applied add-cube-cbrt14.5
Applied times-frac14.5
Applied associate-*l*14.5
Simplified0.9
if -9.7824997876567e-322 < (/ (* a1 a2) (* b1 b2)) < 1.421277284711e-315Initial program 13.6
rmApplied associate-/l*7.3
rmApplied *-un-lft-identity7.3
Applied times-frac3.9
Applied *-un-lft-identity3.9
Applied times-frac3.4
Simplified3.4
Simplified3.5
rmApplied associate-*r*3.8
Simplified3.8
Final simplification2.7
herbie shell --seed 2019323 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))