\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -2.1038078135654004 \cdot 10^{+219}:\\
\;\;\;\;\frac{a1 \cdot \frac{a2}{b1}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -9.013586456865108 \cdot 10^{-95}:\\
\;\;\;\;\frac{1}{\frac{b2 \cdot b1}{a1 \cdot a2}}\\
\mathbf{elif}\;a1 \cdot a2 \le -2.1062713645792236 \cdot 10^{-164}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 7.866668139775074 \cdot 10^{-256}:\\
\;\;\;\;\frac{a2}{b2} \cdot \frac{a1}{b1}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.2752046247109955 \cdot 10^{+283}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a2}{b2} \cdot \frac{a1}{b1}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r5275147 = a1;
double r5275148 = a2;
double r5275149 = r5275147 * r5275148;
double r5275150 = b1;
double r5275151 = b2;
double r5275152 = r5275150 * r5275151;
double r5275153 = r5275149 / r5275152;
return r5275153;
}
double f(double a1, double a2, double b1, double b2) {
double r5275154 = a1;
double r5275155 = a2;
double r5275156 = r5275154 * r5275155;
double r5275157 = -2.1038078135654004e+219;
bool r5275158 = r5275156 <= r5275157;
double r5275159 = b1;
double r5275160 = r5275155 / r5275159;
double r5275161 = r5275154 * r5275160;
double r5275162 = b2;
double r5275163 = r5275161 / r5275162;
double r5275164 = -9.013586456865108e-95;
bool r5275165 = r5275156 <= r5275164;
double r5275166 = 1.0;
double r5275167 = r5275162 * r5275159;
double r5275168 = r5275167 / r5275156;
double r5275169 = r5275166 / r5275168;
double r5275170 = -2.1062713645792236e-164;
bool r5275171 = r5275156 <= r5275170;
double r5275172 = r5275156 / r5275159;
double r5275173 = r5275172 / r5275162;
double r5275174 = 7.866668139775074e-256;
bool r5275175 = r5275156 <= r5275174;
double r5275176 = r5275155 / r5275162;
double r5275177 = r5275154 / r5275159;
double r5275178 = r5275176 * r5275177;
double r5275179 = 1.2752046247109955e+283;
bool r5275180 = r5275156 <= r5275179;
double r5275181 = r5275180 ? r5275173 : r5275178;
double r5275182 = r5275175 ? r5275178 : r5275181;
double r5275183 = r5275171 ? r5275173 : r5275182;
double r5275184 = r5275165 ? r5275169 : r5275183;
double r5275185 = r5275158 ? r5275163 : r5275184;
return r5275185;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.1 |
|---|---|
| Target | 11.4 |
| Herbie | 5.5 |
if (* a1 a2) < -2.1038078135654004e+219Initial program 36.9
rmApplied associate-/r*35.8
rmApplied *-un-lft-identity35.8
Applied times-frac16.9
Simplified16.9
if -2.1038078135654004e+219 < (* a1 a2) < -9.013586456865108e-95Initial program 3.9
rmApplied clear-num4.1
if -9.013586456865108e-95 < (* a1 a2) < -2.1062713645792236e-164 or 7.866668139775074e-256 < (* a1 a2) < 1.2752046247109955e+283Initial program 5.4
rmApplied associate-/r*4.7
if -2.1062713645792236e-164 < (* a1 a2) < 7.866668139775074e-256 or 1.2752046247109955e+283 < (* a1 a2) Initial program 18.7
rmApplied times-frac5.2
Final simplification5.5
herbie shell --seed 2019163 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))