\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\
\;\;\;\;\left(\sqrt[3]{\frac{a1}{b1} \cdot \frac{a2}{b2}} \cdot \sqrt[3]{\frac{a1}{b1} \cdot \frac{a2}{b2}}\right) \cdot \sqrt[3]{\frac{a1}{b1} \cdot \frac{a2}{b2}}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -1.30589486578759189854553536856097661996 \cdot 10^{-294}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 2.960745102170969569715472044147646471052 \cdot 10^{-267}:\\
\;\;\;\;\left(\frac{\sqrt[3]{a1} \cdot \sqrt[3]{a1}}{\sqrt[3]{b1} \cdot \sqrt[3]{b1}} \cdot \left(\frac{\sqrt[3]{a1}}{\sqrt[3]{b1}} \cdot a2\right)\right) \cdot \frac{1}{b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.501180578243183430701187487175576593932 \cdot 10^{300}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{else}:\\
\;\;\;\;\left(\sqrt[3]{\frac{a1}{b1} \cdot \frac{a2}{b2}} \cdot \sqrt[3]{\frac{a1}{b1} \cdot \frac{a2}{b2}}\right) \cdot \sqrt[3]{\frac{a1}{b1} \cdot \frac{a2}{b2}}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r148230 = a1;
double r148231 = a2;
double r148232 = r148230 * r148231;
double r148233 = b1;
double r148234 = b2;
double r148235 = r148233 * r148234;
double r148236 = r148232 / r148235;
return r148236;
}
double f(double a1, double a2, double b1, double b2) {
double r148237 = a1;
double r148238 = a2;
double r148239 = r148237 * r148238;
double r148240 = b1;
double r148241 = b2;
double r148242 = r148240 * r148241;
double r148243 = r148239 / r148242;
double r148244 = -inf.0;
bool r148245 = r148243 <= r148244;
double r148246 = r148237 / r148240;
double r148247 = r148238 / r148241;
double r148248 = r148246 * r148247;
double r148249 = cbrt(r148248);
double r148250 = r148249 * r148249;
double r148251 = r148250 * r148249;
double r148252 = -1.3058948657875919e-294;
bool r148253 = r148243 <= r148252;
double r148254 = 2.9607451021709696e-267;
bool r148255 = r148243 <= r148254;
double r148256 = cbrt(r148237);
double r148257 = r148256 * r148256;
double r148258 = cbrt(r148240);
double r148259 = r148258 * r148258;
double r148260 = r148257 / r148259;
double r148261 = r148256 / r148258;
double r148262 = r148261 * r148238;
double r148263 = r148260 * r148262;
double r148264 = 1.0;
double r148265 = r148264 / r148241;
double r148266 = r148263 * r148265;
double r148267 = 1.5011805782431834e+300;
bool r148268 = r148243 <= r148267;
double r148269 = r148268 ? r148243 : r148251;
double r148270 = r148255 ? r148266 : r148269;
double r148271 = r148253 ? r148243 : r148270;
double r148272 = r148245 ? r148251 : r148271;
return r148272;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.5 |
|---|---|
| Target | 11.4 |
| Herbie | 3.0 |
if (/ (* a1 a2) (* b1 b2)) < -inf.0 or 1.5011805782431834e+300 < (/ (* a1 a2) (* b1 b2)) Initial program 62.5
rmApplied times-frac8.7
rmApplied add-cube-cbrt9.6
if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -1.3058948657875919e-294 or 2.9607451021709696e-267 < (/ (* a1 a2) (* b1 b2)) < 1.5011805782431834e+300Initial program 0.8
if -1.3058948657875919e-294 < (/ (* a1 a2) (* b1 b2)) < 2.9607451021709696e-267Initial program 13.7
rmApplied times-frac3.6
rmApplied div-inv3.6
Applied associate-*r*5.1
rmApplied add-cube-cbrt5.3
Applied add-cube-cbrt5.3
Applied times-frac5.3
Applied associate-*l*4.6
Final simplification3.0
herbie shell --seed 2019354
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))