\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -6.898490520999014 \cdot 10^{+277}:\\
\;\;\;\;\frac{\frac{1}{b1}}{\frac{\frac{1}{a2}}{\frac{a1}{b2}}}\\
\mathbf{elif}\;b1 \cdot b2 \le -9.006559789728174 \cdot 10^{-250}:\\
\;\;\;\;a1 \cdot \frac{a2}{b1 \cdot b2}\\
\mathbf{elif}\;b1 \cdot b2 \le 1.30715975193335 \cdot 10^{-196}:\\
\;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\
\mathbf{elif}\;b1 \cdot b2 \le 7.676958632971629 \cdot 10^{+257}:\\
\;\;\;\;\frac{\frac{a1}{b1 \cdot b2}}{\frac{1}{a2}}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{\frac{b2}{\sqrt[3]{a2}}} \cdot \frac{1}{\frac{b1}{\sqrt[3]{a2} \cdot \sqrt[3]{a2}}}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r3394011 = a1;
double r3394012 = a2;
double r3394013 = r3394011 * r3394012;
double r3394014 = b1;
double r3394015 = b2;
double r3394016 = r3394014 * r3394015;
double r3394017 = r3394013 / r3394016;
return r3394017;
}
double f(double a1, double a2, double b1, double b2) {
double r3394018 = b1;
double r3394019 = b2;
double r3394020 = r3394018 * r3394019;
double r3394021 = -6.898490520999014e+277;
bool r3394022 = r3394020 <= r3394021;
double r3394023 = 1.0;
double r3394024 = r3394023 / r3394018;
double r3394025 = a2;
double r3394026 = r3394023 / r3394025;
double r3394027 = a1;
double r3394028 = r3394027 / r3394019;
double r3394029 = r3394026 / r3394028;
double r3394030 = r3394024 / r3394029;
double r3394031 = -9.006559789728174e-250;
bool r3394032 = r3394020 <= r3394031;
double r3394033 = r3394025 / r3394020;
double r3394034 = r3394027 * r3394033;
double r3394035 = 1.30715975193335e-196;
bool r3394036 = r3394020 <= r3394035;
double r3394037 = r3394027 / r3394018;
double r3394038 = r3394019 / r3394025;
double r3394039 = r3394037 / r3394038;
double r3394040 = 7.676958632971629e+257;
bool r3394041 = r3394020 <= r3394040;
double r3394042 = r3394027 / r3394020;
double r3394043 = r3394042 / r3394026;
double r3394044 = cbrt(r3394025);
double r3394045 = r3394019 / r3394044;
double r3394046 = r3394027 / r3394045;
double r3394047 = r3394044 * r3394044;
double r3394048 = r3394018 / r3394047;
double r3394049 = r3394023 / r3394048;
double r3394050 = r3394046 * r3394049;
double r3394051 = r3394041 ? r3394043 : r3394050;
double r3394052 = r3394036 ? r3394039 : r3394051;
double r3394053 = r3394032 ? r3394034 : r3394052;
double r3394054 = r3394022 ? r3394030 : r3394053;
return r3394054;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.4 |
|---|---|
| Target | 11.0 |
| Herbie | 4.9 |
if (* b1 b2) < -6.898490520999014e+277Initial program 20.9
rmApplied associate-/l*20.8
rmApplied div-inv20.8
Applied associate-/r*20.9
rmApplied *-un-lft-identity20.9
Applied times-frac7.2
Applied associate-/l*2.4
if -6.898490520999014e+277 < (* b1 b2) < -9.006559789728174e-250Initial program 5.0
rmApplied associate-/l*5.2
rmApplied div-inv5.2
Applied associate-/r*4.9
rmApplied div-inv4.9
Applied div-inv4.9
Applied times-frac5.3
Simplified5.3
Simplified5.2
if -9.006559789728174e-250 < (* b1 b2) < 1.30715975193335e-196Initial program 35.6
rmApplied associate-/l*35.7
rmApplied *-un-lft-identity35.7
Applied times-frac17.2
Applied associate-/r*10.0
Simplified10.0
if 1.30715975193335e-196 < (* b1 b2) < 7.676958632971629e+257Initial program 5.0
rmApplied associate-/l*4.7
rmApplied div-inv4.7
Applied associate-/r*4.3
if 7.676958632971629e+257 < (* b1 b2) Initial program 18.3
rmApplied associate-/l*18.4
rmApplied add-cube-cbrt18.5
Applied times-frac7.9
Applied *-un-lft-identity7.9
Applied times-frac2.4
Final simplification4.9
herbie shell --seed 2019153 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))