\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -6.897241169256815 \cdot 10^{+159}:\\
\;\;\;\;\frac{\frac{\sqrt[3]{a1}}{\sqrt[3]{b1}} \cdot \frac{\sqrt[3]{a1}}{\sqrt[3]{b1}}}{\frac{b2}{\frac{1}{\frac{\frac{\sqrt[3]{b1}}{a2}}{\sqrt[3]{a1}}}}}\\
\mathbf{elif}\;a1 \cdot a2 \le -4.213300454402738 \cdot 10^{-210}:\\
\;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{\frac{1}{b1}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 2.8391901767890553 \cdot 10^{-163}:\\
\;\;\;\;\frac{\frac{a2}{b1}}{\frac{b2}{a1}}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.3171664498037926 \cdot 10^{+299}:\\
\;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{\frac{1}{b1}}{b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a2}{b2} \cdot \frac{a1}{b1}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r22638947 = a1;
double r22638948 = a2;
double r22638949 = r22638947 * r22638948;
double r22638950 = b1;
double r22638951 = b2;
double r22638952 = r22638950 * r22638951;
double r22638953 = r22638949 / r22638952;
return r22638953;
}
double f(double a1, double a2, double b1, double b2) {
double r22638954 = a1;
double r22638955 = a2;
double r22638956 = r22638954 * r22638955;
double r22638957 = -6.897241169256815e+159;
bool r22638958 = r22638956 <= r22638957;
double r22638959 = cbrt(r22638954);
double r22638960 = b1;
double r22638961 = cbrt(r22638960);
double r22638962 = r22638959 / r22638961;
double r22638963 = r22638962 * r22638962;
double r22638964 = b2;
double r22638965 = 1.0;
double r22638966 = r22638961 / r22638955;
double r22638967 = r22638966 / r22638959;
double r22638968 = r22638965 / r22638967;
double r22638969 = r22638964 / r22638968;
double r22638970 = r22638963 / r22638969;
double r22638971 = -4.213300454402738e-210;
bool r22638972 = r22638956 <= r22638971;
double r22638973 = r22638965 / r22638960;
double r22638974 = r22638973 / r22638964;
double r22638975 = r22638956 * r22638974;
double r22638976 = 2.8391901767890553e-163;
bool r22638977 = r22638956 <= r22638976;
double r22638978 = r22638955 / r22638960;
double r22638979 = r22638964 / r22638954;
double r22638980 = r22638978 / r22638979;
double r22638981 = 1.3171664498037926e+299;
bool r22638982 = r22638956 <= r22638981;
double r22638983 = r22638955 / r22638964;
double r22638984 = r22638954 / r22638960;
double r22638985 = r22638983 * r22638984;
double r22638986 = r22638982 ? r22638975 : r22638985;
double r22638987 = r22638977 ? r22638980 : r22638986;
double r22638988 = r22638972 ? r22638975 : r22638987;
double r22638989 = r22638958 ? r22638970 : r22638988;
return r22638989;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 10.8 |
|---|---|
| Target | 10.9 |
| Herbie | 5.3 |
if (* a1 a2) < -6.897241169256815e+159Initial program 26.1
rmApplied associate-/r*26.4
rmApplied associate-/l*15.6
rmApplied *-un-lft-identity15.6
Applied associate-/l*15.7
rmApplied add-cube-cbrt16.3
Applied *-un-lft-identity16.3
Applied add-cube-cbrt16.5
Applied times-frac16.5
Applied times-frac15.3
Applied *-un-lft-identity15.3
Applied times-frac15.4
Applied associate-/l*8.9
Simplified8.9
if -6.897241169256815e+159 < (* a1 a2) < -4.213300454402738e-210 or 2.8391901767890553e-163 < (* a1 a2) < 1.3171664498037926e+299Initial program 4.7
rmApplied associate-/r*4.3
rmApplied *-un-lft-identity4.3
Applied div-inv4.4
Applied times-frac4.8
Simplified4.8
if -4.213300454402738e-210 < (* a1 a2) < 2.8391901767890553e-163Initial program 13.5
rmApplied associate-/r*13.3
rmApplied associate-/l*7.6
rmApplied *-un-lft-identity7.6
Applied associate-/l*8.0
rmApplied associate-/r/7.7
Applied associate-/l*5.3
Simplified5.0
if 1.3171664498037926e+299 < (* a1 a2) Initial program 57.6
rmApplied associate-/r*57.9
rmApplied associate-/l*24.9
rmApplied *-un-lft-identity24.9
Applied associate-/r/25.0
Applied times-frac7.4
Simplified7.4
Final simplification5.3
herbie shell --seed 2019124 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))