\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -1.2127685659922545 \cdot 10^{+214}:\\
\;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -4.4979291324398776 \cdot 10^{-178}:\\
\;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{1}{b2 \cdot b1}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.196927419235656 \cdot 10^{-145}:\\
\;\;\;\;\left(\frac{a1}{\frac{b1}{\frac{\sqrt[3]{a2}}{\sqrt[3]{b2}}}} \cdot \frac{\sqrt[3]{a2}}{\sqrt[3]{b2}}\right) \cdot \frac{1}{\frac{1}{\frac{\sqrt[3]{a2}}{\sqrt[3]{b2}}}}\\
\mathbf{elif}\;a1 \cdot a2 \le 9.61446956110427 \cdot 10^{+171}:\\
\;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{1}{b2 \cdot b1}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{\frac{b1}{\frac{\sqrt[3]{a2}}{\sqrt[3]{b2}} \cdot \frac{\sqrt[3]{a2}}{\sqrt[3]{b2}}}} \cdot \frac{\sqrt[3]{a2}}{\sqrt[3]{b2}}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r7230868 = a1;
double r7230869 = a2;
double r7230870 = r7230868 * r7230869;
double r7230871 = b1;
double r7230872 = b2;
double r7230873 = r7230871 * r7230872;
double r7230874 = r7230870 / r7230873;
return r7230874;
}
double f(double a1, double a2, double b1, double b2) {
double r7230875 = a1;
double r7230876 = a2;
double r7230877 = r7230875 * r7230876;
double r7230878 = -1.2127685659922545e+214;
bool r7230879 = r7230877 <= r7230878;
double r7230880 = b1;
double r7230881 = r7230876 / r7230880;
double r7230882 = b2;
double r7230883 = r7230881 / r7230882;
double r7230884 = r7230875 * r7230883;
double r7230885 = -4.4979291324398776e-178;
bool r7230886 = r7230877 <= r7230885;
double r7230887 = 1.0;
double r7230888 = r7230882 * r7230880;
double r7230889 = r7230887 / r7230888;
double r7230890 = r7230877 * r7230889;
double r7230891 = 1.196927419235656e-145;
bool r7230892 = r7230877 <= r7230891;
double r7230893 = cbrt(r7230876);
double r7230894 = cbrt(r7230882);
double r7230895 = r7230893 / r7230894;
double r7230896 = r7230880 / r7230895;
double r7230897 = r7230875 / r7230896;
double r7230898 = r7230897 * r7230895;
double r7230899 = r7230887 / r7230895;
double r7230900 = r7230887 / r7230899;
double r7230901 = r7230898 * r7230900;
double r7230902 = 9.61446956110427e+171;
bool r7230903 = r7230877 <= r7230902;
double r7230904 = r7230895 * r7230895;
double r7230905 = r7230880 / r7230904;
double r7230906 = r7230875 / r7230905;
double r7230907 = r7230906 * r7230895;
double r7230908 = r7230903 ? r7230890 : r7230907;
double r7230909 = r7230892 ? r7230901 : r7230908;
double r7230910 = r7230886 ? r7230890 : r7230909;
double r7230911 = r7230879 ? r7230884 : r7230910;
return r7230911;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 10.9 |
|---|---|
| Target | 11.0 |
| Herbie | 4.3 |
if (* a1 a2) < -1.2127685659922545e+214Initial program 33.2
rmApplied times-frac9.9
rmApplied div-inv10.0
Applied associate-*l*11.4
Simplified8.9
if -1.2127685659922545e+214 < (* a1 a2) < -4.4979291324398776e-178 or 1.196927419235656e-145 < (* a1 a2) < 9.61446956110427e+171Initial program 4.1
rmApplied div-inv4.4
if -4.4979291324398776e-178 < (* a1 a2) < 1.196927419235656e-145Initial program 12.8
rmApplied times-frac5.7
rmApplied add-cube-cbrt6.1
Applied add-cube-cbrt6.3
Applied times-frac6.3
Applied associate-*r*4.0
Simplified3.3
rmApplied *-un-lft-identity3.3
Applied times-frac3.0
Applied *-un-lft-identity3.0
Applied times-frac2.9
Applied associate-*l*2.9
if 9.61446956110427e+171 < (* a1 a2) Initial program 31.1
rmApplied times-frac11.5
rmApplied add-cube-cbrt12.3
Applied add-cube-cbrt12.5
Applied times-frac12.5
Applied associate-*r*7.8
Simplified6.7
Final simplification4.3
herbie shell --seed 2019162 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))