\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -1.4931232845681356 \cdot 10^{168}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -2.0866604942007535 \cdot 10^{-124}:\\
\;\;\;\;\frac{1}{\frac{b2}{\frac{a1 \cdot a2}{b1}}}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.01600999395086732 \cdot 10^{-257}:\\
\;\;\;\;\frac{\frac{\frac{a1}{\sqrt[3]{b1} \cdot \sqrt[3]{b1}}}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \left(\sqrt[3]{a2} \cdot \sqrt[3]{a2}\right)}{\sqrt[3]{\sqrt[3]{b2} \cdot \sqrt[3]{b2}}} \cdot \frac{\frac{\sqrt[3]{a2}}{\sqrt[3]{b1}}}{\sqrt[3]{\sqrt[3]{b2}}}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.59608712487395094 \cdot 10^{126}:\\
\;\;\;\;\frac{1}{\frac{b2}{\frac{a1 \cdot a2}{b1}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{a1}{\sqrt[3]{b1} \cdot \sqrt[3]{b1}}}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{\frac{a2}{\sqrt[3]{b1}}}{\sqrt[3]{b2}}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r176036 = a1;
double r176037 = a2;
double r176038 = r176036 * r176037;
double r176039 = b1;
double r176040 = b2;
double r176041 = r176039 * r176040;
double r176042 = r176038 / r176041;
return r176042;
}
double f(double a1, double a2, double b1, double b2) {
double r176043 = a1;
double r176044 = a2;
double r176045 = r176043 * r176044;
double r176046 = -1.4931232845681356e+168;
bool r176047 = r176045 <= r176046;
double r176048 = b1;
double r176049 = r176043 / r176048;
double r176050 = b2;
double r176051 = r176044 / r176050;
double r176052 = r176049 * r176051;
double r176053 = -2.0866604942007535e-124;
bool r176054 = r176045 <= r176053;
double r176055 = 1.0;
double r176056 = r176045 / r176048;
double r176057 = r176050 / r176056;
double r176058 = r176055 / r176057;
double r176059 = 1.0160099939508673e-257;
bool r176060 = r176045 <= r176059;
double r176061 = cbrt(r176048);
double r176062 = r176061 * r176061;
double r176063 = r176043 / r176062;
double r176064 = cbrt(r176050);
double r176065 = r176064 * r176064;
double r176066 = r176063 / r176065;
double r176067 = cbrt(r176044);
double r176068 = r176067 * r176067;
double r176069 = r176066 * r176068;
double r176070 = cbrt(r176065);
double r176071 = r176069 / r176070;
double r176072 = r176067 / r176061;
double r176073 = cbrt(r176064);
double r176074 = r176072 / r176073;
double r176075 = r176071 * r176074;
double r176076 = 1.596087124873951e+126;
bool r176077 = r176045 <= r176076;
double r176078 = r176044 / r176061;
double r176079 = r176078 / r176064;
double r176080 = r176066 * r176079;
double r176081 = r176077 ? r176058 : r176080;
double r176082 = r176060 ? r176075 : r176081;
double r176083 = r176054 ? r176058 : r176082;
double r176084 = r176047 ? r176052 : r176083;
return r176084;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.6 |
|---|---|
| Target | 11.3 |
| Herbie | 5.0 |
if (* a1 a2) < -1.4931232845681356e+168Initial program 30.4
rmApplied times-frac12.5
if -1.4931232845681356e+168 < (* a1 a2) < -2.0866604942007535e-124 or 1.0160099939508673e-257 < (* a1 a2) < 1.596087124873951e+126Initial program 4.0
rmApplied associate-/r*3.7
rmApplied clear-num4.1
if -2.0866604942007535e-124 < (* a1 a2) < 1.0160099939508673e-257Initial program 14.7
rmApplied associate-/r*14.7
rmApplied add-cube-cbrt15.0
Applied add-cube-cbrt15.1
Applied times-frac8.4
Applied times-frac3.5
rmApplied add-cube-cbrt3.5
Applied cbrt-prod3.6
Applied *-un-lft-identity3.6
Applied add-cube-cbrt3.6
Applied times-frac3.6
Applied times-frac3.0
Applied associate-*r*3.0
Simplified3.0
if 1.596087124873951e+126 < (* a1 a2) Initial program 25.3
rmApplied associate-/r*27.1
rmApplied add-cube-cbrt27.7
Applied add-cube-cbrt27.8
Applied times-frac17.4
Applied times-frac9.4
Final simplification5.0
herbie shell --seed 2020056
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))