\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 = -\infty:\\
\;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -6.848939379187657 \cdot 10^{-209}:\\
\;\;\;\;\frac{a1 \cdot a2}{b2 \cdot b1}\\
\mathbf{elif}\;a1 \cdot a2 \le 8.9817388408212 \cdot 10^{-316}:\\
\;\;\;\;\left(\sqrt[3]{a1} \cdot \sqrt[3]{a1}\right) \cdot \left(\frac{\sqrt[3]{a1}}{b1} \cdot \frac{a2}{b2}\right)\\
\mathbf{elif}\;a1 \cdot a2 \le 7.101110806155063 \cdot 10^{+218}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{else}:\\
\;\;\;\;\left(\sqrt[3]{a1} \cdot \sqrt[3]{a1}\right) \cdot \left(\frac{\sqrt[3]{a1}}{b1} \cdot \frac{a2}{b2}\right)\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r2566571 = a1;
double r2566572 = a2;
double r2566573 = r2566571 * r2566572;
double r2566574 = b1;
double r2566575 = b2;
double r2566576 = r2566574 * r2566575;
double r2566577 = r2566573 / r2566576;
return r2566577;
}
double f(double a1, double a2, double b1, double b2) {
double r2566578 = a1;
double r2566579 = a2;
double r2566580 = r2566578 * r2566579;
double r2566581 = -inf.0;
bool r2566582 = r2566580 <= r2566581;
double r2566583 = b1;
double r2566584 = r2566579 / r2566583;
double r2566585 = b2;
double r2566586 = r2566584 / r2566585;
double r2566587 = r2566578 * r2566586;
double r2566588 = -6.848939379187657e-209;
bool r2566589 = r2566580 <= r2566588;
double r2566590 = r2566585 * r2566583;
double r2566591 = r2566580 / r2566590;
double r2566592 = 8.9817388408212e-316;
bool r2566593 = r2566580 <= r2566592;
double r2566594 = cbrt(r2566578);
double r2566595 = r2566594 * r2566594;
double r2566596 = r2566594 / r2566583;
double r2566597 = r2566579 / r2566585;
double r2566598 = r2566596 * r2566597;
double r2566599 = r2566595 * r2566598;
double r2566600 = 7.101110806155063e+218;
bool r2566601 = r2566580 <= r2566600;
double r2566602 = r2566580 / r2566583;
double r2566603 = r2566602 / r2566585;
double r2566604 = r2566601 ? r2566603 : r2566599;
double r2566605 = r2566593 ? r2566599 : r2566604;
double r2566606 = r2566589 ? r2566591 : r2566605;
double r2566607 = r2566582 ? r2566587 : r2566606;
return r2566607;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 10.8 |
|---|---|
| Target | 10.6 |
| Herbie | 4.8 |
if (* a1 a2) < -inf.0Initial program 61.0
rmApplied times-frac7.9
rmApplied div-inv8.0
Applied associate-*l*7.9
Simplified5.2
if -inf.0 < (* a1 a2) < -6.848939379187657e-209Initial program 4.5
rmApplied times-frac13.7
Taylor expanded around -inf 4.5
if -6.848939379187657e-209 < (* a1 a2) < 8.9817388408212e-316 or 7.101110806155063e+218 < (* a1 a2) Initial program 21.5
rmApplied times-frac5.3
rmApplied *-un-lft-identity5.3
Applied add-cube-cbrt5.8
Applied times-frac5.8
Applied associate-*l*4.3
if 8.9817388408212e-316 < (* a1 a2) < 7.101110806155063e+218Initial program 4.8
rmApplied associate-/r*5.4
Final simplification4.8
herbie shell --seed 2019152 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))