\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -4.295262739202245039131130912309167502672 \cdot 10^{244}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -2.007504316727393710931951094013571648268 \cdot 10^{-192}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 4.005070037874945688454093389847452370632 \cdot 10^{-123}:\\
\;\;\;\;\frac{a1}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{\frac{a2}{b1}}{\sqrt[3]{b2}}\\
\mathbf{elif}\;a1 \cdot a2 \le 4.152278219639707545525802866459256457129 \cdot 10^{229}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r79930 = a1;
double r79931 = a2;
double r79932 = r79930 * r79931;
double r79933 = b1;
double r79934 = b2;
double r79935 = r79933 * r79934;
double r79936 = r79932 / r79935;
return r79936;
}
double f(double a1, double a2, double b1, double b2) {
double r79937 = a1;
double r79938 = a2;
double r79939 = r79937 * r79938;
double r79940 = -4.295262739202245e+244;
bool r79941 = r79939 <= r79940;
double r79942 = b1;
double r79943 = r79937 / r79942;
double r79944 = b2;
double r79945 = r79938 / r79944;
double r79946 = r79943 * r79945;
double r79947 = -2.0075043167273937e-192;
bool r79948 = r79939 <= r79947;
double r79949 = r79939 / r79942;
double r79950 = r79949 / r79944;
double r79951 = 4.005070037874946e-123;
bool r79952 = r79939 <= r79951;
double r79953 = cbrt(r79944);
double r79954 = r79953 * r79953;
double r79955 = r79937 / r79954;
double r79956 = r79938 / r79942;
double r79957 = r79956 / r79953;
double r79958 = r79955 * r79957;
double r79959 = 4.1522782196397075e+229;
bool r79960 = r79939 <= r79959;
double r79961 = r79960 ? r79950 : r79946;
double r79962 = r79952 ? r79958 : r79961;
double r79963 = r79948 ? r79950 : r79962;
double r79964 = r79941 ? r79946 : r79963;
return r79964;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.6 |
|---|---|
| Target | 10.9 |
| Herbie | 5.0 |
if (* a1 a2) < -4.295262739202245e+244 or 4.1522782196397075e+229 < (* a1 a2) Initial program 42.5
rmApplied times-frac8.2
if -4.295262739202245e+244 < (* a1 a2) < -2.0075043167273937e-192 or 4.005070037874946e-123 < (* a1 a2) < 4.1522782196397075e+229Initial program 4.8
rmApplied associate-/r*4.5
rmApplied div-inv4.6
rmApplied pow14.6
Applied pow14.6
Applied pow14.6
Applied pow-prod-down4.6
Applied pow-prod-down4.6
Simplified4.5
if -2.0075043167273937e-192 < (* a1 a2) < 4.005070037874946e-123Initial program 13.7
rmApplied associate-/r*13.2
rmApplied add-cube-cbrt13.5
Applied *-un-lft-identity13.5
Applied times-frac7.8
Applied times-frac4.9
Simplified4.9
Final simplification5.0
herbie shell --seed 2019306 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))