\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -8.29796578676969 \cdot 10^{+222}:\\
\;\;\;\;\frac{\frac{a1}{b2}}{b1} \cdot a2\\
\mathbf{elif}\;a1 \cdot a2 \le -2.7996586332702162 \cdot 10^{-300}:\\
\;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{\frac{1}{b2}}{b1}\\
\mathbf{elif}\;a1 \cdot a2 \le 8.211761671392944 \cdot 10^{-166}:\\
\;\;\;\;\frac{1}{\frac{b1}{a1} \cdot \frac{b2}{a2}}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.2729110264349966 \cdot 10^{+141}:\\
\;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{\frac{1}{b2}}{b1}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{a1}{b2}}{b1} \cdot a2\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r5956084 = a1;
double r5956085 = a2;
double r5956086 = r5956084 * r5956085;
double r5956087 = b1;
double r5956088 = b2;
double r5956089 = r5956087 * r5956088;
double r5956090 = r5956086 / r5956089;
return r5956090;
}
double f(double a1, double a2, double b1, double b2) {
double r5956091 = a1;
double r5956092 = a2;
double r5956093 = r5956091 * r5956092;
double r5956094 = -8.29796578676969e+222;
bool r5956095 = r5956093 <= r5956094;
double r5956096 = b2;
double r5956097 = r5956091 / r5956096;
double r5956098 = b1;
double r5956099 = r5956097 / r5956098;
double r5956100 = r5956099 * r5956092;
double r5956101 = -2.7996586332702162e-300;
bool r5956102 = r5956093 <= r5956101;
double r5956103 = 1.0;
double r5956104 = r5956103 / r5956096;
double r5956105 = r5956104 / r5956098;
double r5956106 = r5956093 * r5956105;
double r5956107 = 8.211761671392944e-166;
bool r5956108 = r5956093 <= r5956107;
double r5956109 = r5956098 / r5956091;
double r5956110 = r5956096 / r5956092;
double r5956111 = r5956109 * r5956110;
double r5956112 = r5956103 / r5956111;
double r5956113 = 1.2729110264349966e+141;
bool r5956114 = r5956093 <= r5956113;
double r5956115 = r5956114 ? r5956106 : r5956100;
double r5956116 = r5956108 ? r5956112 : r5956115;
double r5956117 = r5956102 ? r5956106 : r5956116;
double r5956118 = r5956095 ? r5956100 : r5956117;
return r5956118;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.5 |
|---|---|
| Target | 11.4 |
| Herbie | 5.6 |
if (* a1 a2) < -8.29796578676969e+222 or 1.2729110264349966e+141 < (* a1 a2) Initial program 33.1
rmApplied clear-num33.2
rmApplied div-inv33.2
Applied add-cube-cbrt33.2
Applied times-frac33.2
Simplified32.7
Simplified32.6
rmApplied associate-*r*17.2
Simplified10.6
if -8.29796578676969e+222 < (* a1 a2) < -2.7996586332702162e-300 or 8.211761671392944e-166 < (* a1 a2) < 1.2729110264349966e+141Initial program 4.5
rmApplied clear-num4.8
rmApplied div-inv4.9
Applied add-cube-cbrt4.9
Applied times-frac4.9
Simplified4.6
Simplified4.6
if -2.7996586332702162e-300 < (* a1 a2) < 8.211761671392944e-166Initial program 15.4
rmApplied clear-num15.6
rmApplied times-frac5.0
Final simplification5.6
herbie shell --seed 2019165
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))