\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -2.8434153992902853 \cdot 10^{+140}:\\
\;\;\;\;\left(\frac{a1}{b1} \cdot a2\right) \cdot \frac{1}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -1.2487145692624138 \cdot 10^{-211}:\\
\;\;\;\;\frac{1}{\frac{b2 \cdot b1}{a1 \cdot a2}}\\
\mathbf{elif}\;a1 \cdot a2 \le 3.9749733958626933 \cdot 10^{-168}:\\
\;\;\;\;\left(\left(\left(\sqrt[3]{a2} \cdot \sqrt[3]{a2}\right) \cdot \frac{\sqrt[3]{a1}}{b1}\right) \cdot \frac{\sqrt[3]{a2}}{b2}\right) \cdot \left(\sqrt[3]{a1} \cdot \sqrt[3]{a1}\right)\\
\mathbf{elif}\;a1 \cdot a2 \le 8.48764460014293 \cdot 10^{+180}:\\
\;\;\;\;\frac{1}{\frac{b2 \cdot b1}{a1 \cdot a2}}\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(\sqrt[3]{a2} \cdot \sqrt[3]{a2}\right) \cdot \frac{\sqrt[3]{a1}}{b1}\right) \cdot \frac{\sqrt[3]{a2}}{b2}\right) \cdot \left(\sqrt[3]{a1} \cdot \sqrt[3]{a1}\right)\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r5996429 = a1;
double r5996430 = a2;
double r5996431 = r5996429 * r5996430;
double r5996432 = b1;
double r5996433 = b2;
double r5996434 = r5996432 * r5996433;
double r5996435 = r5996431 / r5996434;
return r5996435;
}
double f(double a1, double a2, double b1, double b2) {
double r5996436 = a1;
double r5996437 = a2;
double r5996438 = r5996436 * r5996437;
double r5996439 = -2.8434153992902853e+140;
bool r5996440 = r5996438 <= r5996439;
double r5996441 = b1;
double r5996442 = r5996436 / r5996441;
double r5996443 = r5996442 * r5996437;
double r5996444 = 1.0;
double r5996445 = b2;
double r5996446 = r5996444 / r5996445;
double r5996447 = r5996443 * r5996446;
double r5996448 = -1.2487145692624138e-211;
bool r5996449 = r5996438 <= r5996448;
double r5996450 = r5996445 * r5996441;
double r5996451 = r5996450 / r5996438;
double r5996452 = r5996444 / r5996451;
double r5996453 = 3.9749733958626933e-168;
bool r5996454 = r5996438 <= r5996453;
double r5996455 = cbrt(r5996437);
double r5996456 = r5996455 * r5996455;
double r5996457 = cbrt(r5996436);
double r5996458 = r5996457 / r5996441;
double r5996459 = r5996456 * r5996458;
double r5996460 = r5996455 / r5996445;
double r5996461 = r5996459 * r5996460;
double r5996462 = r5996457 * r5996457;
double r5996463 = r5996461 * r5996462;
double r5996464 = 8.48764460014293e+180;
bool r5996465 = r5996438 <= r5996464;
double r5996466 = r5996465 ? r5996452 : r5996463;
double r5996467 = r5996454 ? r5996463 : r5996466;
double r5996468 = r5996449 ? r5996452 : r5996467;
double r5996469 = r5996440 ? r5996447 : r5996468;
return r5996469;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.0 |
|---|---|
| Target | 10.7 |
| Herbie | 5.6 |
if (* a1 a2) < -2.8434153992902853e+140Initial program 25.5
rmApplied times-frac11.7
rmApplied div-inv11.7
Applied associate-*r*16.6
if -2.8434153992902853e+140 < (* a1 a2) < -1.2487145692624138e-211 or 3.9749733958626933e-168 < (* a1 a2) < 8.48764460014293e+180Initial program 3.6
rmApplied clear-num3.9
if -1.2487145692624138e-211 < (* a1 a2) < 3.9749733958626933e-168 or 8.48764460014293e+180 < (* a1 a2) Initial program 17.4
rmApplied times-frac6.0
rmApplied *-un-lft-identity6.0
Applied add-cube-cbrt6.5
Applied times-frac6.5
Applied associate-*l*5.3
rmApplied *-un-lft-identity5.3
Applied add-cube-cbrt5.5
Applied times-frac5.5
Applied associate-*r*5.0
Simplified5.0
Final simplification5.6
herbie shell --seed 2019132 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))