\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -4.57378486630527 \cdot 10^{-309}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -0.0:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.1129784645222681 \cdot 10^{+303}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\sqrt[3]{a2}}{\sqrt[3]{b1}}}{\sqrt[3]{\sqrt[3]{b2}}} \cdot \frac{\frac{\frac{a1}{\sqrt[3]{b1} \cdot \sqrt[3]{b2}}}{\sqrt[3]{b1} \cdot \sqrt[3]{b2}}}{\frac{\sqrt[3]{\sqrt[3]{b2}}}{\sqrt[3]{a2}} \cdot \frac{\sqrt[3]{\sqrt[3]{b2}}}{\sqrt[3]{a2}}}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r54505240 = a1;
double r54505241 = a2;
double r54505242 = r54505240 * r54505241;
double r54505243 = b1;
double r54505244 = b2;
double r54505245 = r54505243 * r54505244;
double r54505246 = r54505242 / r54505245;
return r54505246;
}
double f(double a1, double a2, double b1, double b2) {
double r54505247 = a1;
double r54505248 = a2;
double r54505249 = r54505247 * r54505248;
double r54505250 = b1;
double r54505251 = b2;
double r54505252 = r54505250 * r54505251;
double r54505253 = r54505249 / r54505252;
double r54505254 = -inf.0;
bool r54505255 = r54505253 <= r54505254;
double r54505256 = r54505247 / r54505250;
double r54505257 = r54505248 / r54505251;
double r54505258 = r54505256 * r54505257;
double r54505259 = -4.57378486630527e-309;
bool r54505260 = r54505253 <= r54505259;
double r54505261 = -0.0;
bool r54505262 = r54505253 <= r54505261;
double r54505263 = 1.1129784645222681e+303;
bool r54505264 = r54505253 <= r54505263;
double r54505265 = cbrt(r54505248);
double r54505266 = cbrt(r54505250);
double r54505267 = r54505265 / r54505266;
double r54505268 = cbrt(r54505251);
double r54505269 = cbrt(r54505268);
double r54505270 = r54505267 / r54505269;
double r54505271 = r54505266 * r54505268;
double r54505272 = r54505247 / r54505271;
double r54505273 = r54505272 / r54505271;
double r54505274 = r54505269 / r54505265;
double r54505275 = r54505274 * r54505274;
double r54505276 = r54505273 / r54505275;
double r54505277 = r54505270 * r54505276;
double r54505278 = r54505264 ? r54505253 : r54505277;
double r54505279 = r54505262 ? r54505258 : r54505278;
double r54505280 = r54505260 ? r54505253 : r54505279;
double r54505281 = r54505255 ? r54505258 : r54505280;
return r54505281;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.2 |
|---|---|
| Target | 10.9 |
| Herbie | 1.9 |
if (/ (* a1 a2) (* b1 b2)) < -inf.0 or -4.57378486630527e-309 < (/ (* a1 a2) (* b1 b2)) < -0.0Initial program 18.4
rmApplied times-frac3.0
if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -4.57378486630527e-309 or -0.0 < (/ (* a1 a2) (* b1 b2)) < 1.1129784645222681e+303Initial program 0.8
if 1.1129784645222681e+303 < (/ (* a1 a2) (* b1 b2)) Initial program 60.0
rmApplied associate-/r*45.0
rmApplied add-cube-cbrt45.3
Applied add-cube-cbrt45.5
Applied times-frac12.6
Applied times-frac6.7
Simplified5.7
rmApplied add-cube-cbrt5.9
Applied *-un-lft-identity5.9
Applied cbrt-prod5.9
Applied add-cube-cbrt6.0
Applied times-frac6.0
Applied times-frac5.3
Applied associate-*r*5.6
Simplified5.6
Final simplification1.9
herbie shell --seed 2019125 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))