\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\
\;\;\;\;\frac{a2}{\frac{b2}{\frac{a1}{b1}}}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -1.0649959642427268 \cdot 10^{-279}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -0.0:\\
\;\;\;\;\frac{a1}{b2} \cdot \frac{a2}{b1}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 8.599188876226926 \cdot 10^{+263}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{b2} \cdot \frac{a2}{b1}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r34800958 = a1;
double r34800959 = a2;
double r34800960 = r34800958 * r34800959;
double r34800961 = b1;
double r34800962 = b2;
double r34800963 = r34800961 * r34800962;
double r34800964 = r34800960 / r34800963;
return r34800964;
}
double f(double a1, double a2, double b1, double b2) {
double r34800965 = a1;
double r34800966 = a2;
double r34800967 = r34800965 * r34800966;
double r34800968 = b1;
double r34800969 = b2;
double r34800970 = r34800968 * r34800969;
double r34800971 = r34800967 / r34800970;
double r34800972 = -inf.0;
bool r34800973 = r34800971 <= r34800972;
double r34800974 = r34800965 / r34800968;
double r34800975 = r34800969 / r34800974;
double r34800976 = r34800966 / r34800975;
double r34800977 = -1.0649959642427268e-279;
bool r34800978 = r34800971 <= r34800977;
double r34800979 = -0.0;
bool r34800980 = r34800971 <= r34800979;
double r34800981 = r34800965 / r34800969;
double r34800982 = r34800966 / r34800968;
double r34800983 = r34800981 * r34800982;
double r34800984 = 8.599188876226926e+263;
bool r34800985 = r34800971 <= r34800984;
double r34800986 = r34800985 ? r34800971 : r34800983;
double r34800987 = r34800980 ? r34800983 : r34800986;
double r34800988 = r34800978 ? r34800971 : r34800987;
double r34800989 = r34800973 ? r34800976 : r34800988;
return r34800989;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 10.9 |
|---|---|
| Target | 11.0 |
| Herbie | 2.6 |
if (/ (* a1 a2) (* b1 b2)) < -inf.0Initial program 59.9
rmApplied associate-/l*26.9
rmApplied add-cube-cbrt27.5
Applied times-frac16.2
Applied *-un-lft-identity16.2
Applied times-frac8.9
Simplified8.8
rmApplied pow18.8
Applied pow18.8
Applied pow-prod-down8.8
Simplified13.7
if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -1.0649959642427268e-279 or -0.0 < (/ (* a1 a2) (* b1 b2)) < 8.599188876226926e+263Initial program 0.8
if -1.0649959642427268e-279 < (/ (* a1 a2) (* b1 b2)) < -0.0 or 8.599188876226926e+263 < (/ (* a1 a2) (* b1 b2)) Initial program 20.4
rmApplied associate-/l*13.7
rmApplied add-cube-cbrt13.9
Applied times-frac6.0
Applied *-un-lft-identity6.0
Applied times-frac4.2
Simplified4.1
rmApplied associate-*l/6.1
Simplified6.1
rmApplied *-un-lft-identity6.1
Applied times-frac4.2
Simplified4.2
Final simplification2.6
herbie shell --seed 2019121
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))