\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 r68871 = a1;
double r68872 = a2;
double r68873 = r68871 * r68872;
double r68874 = b1;
double r68875 = b2;
double r68876 = r68874 * r68875;
double r68877 = r68873 / r68876;
return r68877;
}
double f(double a1, double a2, double b1, double b2) {
double r68878 = a1;
double r68879 = a2;
double r68880 = r68878 * r68879;
double r68881 = -4.295262739202245e+244;
bool r68882 = r68880 <= r68881;
double r68883 = b1;
double r68884 = r68878 / r68883;
double r68885 = b2;
double r68886 = r68879 / r68885;
double r68887 = r68884 * r68886;
double r68888 = -2.0075043167273937e-192;
bool r68889 = r68880 <= r68888;
double r68890 = r68880 / r68883;
double r68891 = r68890 / r68885;
double r68892 = 4.005070037874946e-123;
bool r68893 = r68880 <= r68892;
double r68894 = cbrt(r68885);
double r68895 = r68894 * r68894;
double r68896 = r68878 / r68895;
double r68897 = r68879 / r68883;
double r68898 = r68897 / r68894;
double r68899 = r68896 * r68898;
double r68900 = 4.1522782196397075e+229;
bool r68901 = r68880 <= r68900;
double r68902 = r68901 ? r68891 : r68887;
double r68903 = r68893 ? r68899 : r68902;
double r68904 = r68889 ? r68891 : r68903;
double r68905 = r68882 ? r68887 : r68904;
return r68905;
}




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
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))