\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -3.023233587679621 \cdot 10^{+251}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -2.1296092868396195 \cdot 10^{-227}:\\
\;\;\;\;\frac{\left(a1 \cdot a2\right) \cdot \frac{1}{b1}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 2.887172661957492 \cdot 10^{-160}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 2.1722925108220896 \cdot 10^{+142}:\\
\;\;\;\;\frac{\left(a1 \cdot a2\right) \cdot \frac{1}{b1}}{b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1 \cdot \frac{a2}{b1}}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r4045830 = a1;
double r4045831 = a2;
double r4045832 = r4045830 * r4045831;
double r4045833 = b1;
double r4045834 = b2;
double r4045835 = r4045833 * r4045834;
double r4045836 = r4045832 / r4045835;
return r4045836;
}
double f(double a1, double a2, double b1, double b2) {
double r4045837 = a1;
double r4045838 = a2;
double r4045839 = r4045837 * r4045838;
double r4045840 = -3.023233587679621e+251;
bool r4045841 = r4045839 <= r4045840;
double r4045842 = b1;
double r4045843 = r4045837 / r4045842;
double r4045844 = b2;
double r4045845 = r4045838 / r4045844;
double r4045846 = r4045843 * r4045845;
double r4045847 = -2.1296092868396195e-227;
bool r4045848 = r4045839 <= r4045847;
double r4045849 = 1.0;
double r4045850 = r4045849 / r4045842;
double r4045851 = r4045839 * r4045850;
double r4045852 = r4045851 / r4045844;
double r4045853 = 2.887172661957492e-160;
bool r4045854 = r4045839 <= r4045853;
double r4045855 = 2.1722925108220896e+142;
bool r4045856 = r4045839 <= r4045855;
double r4045857 = r4045838 / r4045842;
double r4045858 = r4045837 * r4045857;
double r4045859 = r4045858 / r4045844;
double r4045860 = r4045856 ? r4045852 : r4045859;
double r4045861 = r4045854 ? r4045846 : r4045860;
double r4045862 = r4045848 ? r4045852 : r4045861;
double r4045863 = r4045841 ? r4045846 : r4045862;
return r4045863;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 10.8 |
|---|---|
| Target | 10.7 |
| Herbie | 5.7 |
if (* a1 a2) < -3.023233587679621e+251 or -2.1296092868396195e-227 < (* a1 a2) < 2.887172661957492e-160Initial program 17.9
rmApplied times-frac5.2
if -3.023233587679621e+251 < (* a1 a2) < -2.1296092868396195e-227 or 2.887172661957492e-160 < (* a1 a2) < 2.1722925108220896e+142Initial program 4.3
rmApplied associate-/r*4.3
rmApplied *-un-lft-identity4.3
Applied times-frac11.5
Simplified11.5
rmApplied div-inv11.6
Applied associate-*r*4.4
if 2.1722925108220896e+142 < (* a1 a2) Initial program 26.0
rmApplied associate-/r*26.9
rmApplied *-un-lft-identity26.9
Applied times-frac15.9
Simplified15.9
Final simplification5.7
herbie shell --seed 2019149 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))