\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -1.94889360893563438071998752474482145298 \cdot 10^{196}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -2.218601469831208276173547548571215326996 \cdot 10^{-177}:\\
\;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\
\mathbf{elif}\;a1 \cdot a2 \le 5.026121071344955568278533610414416564485 \cdot 10^{-270}:\\
\;\;\;\;\frac{\frac{\sqrt[3]{a1}}{\frac{\sqrt[3]{b2} \cdot \sqrt[3]{b2}}{\sqrt[3]{a1}}}}{b1} \cdot \frac{\sqrt[3]{a1}}{\frac{\sqrt[3]{b2}}{a2}}\\
\mathbf{elif}\;a1 \cdot a2 \le 6.895199432649532243061505251331231991353 \cdot 10^{155}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\sqrt[3]{a1}}{\frac{\sqrt[3]{b2} \cdot \sqrt[3]{b2}}{\sqrt[3]{a1}}}}{b1} \cdot \frac{\sqrt[3]{a1}}{\frac{\sqrt[3]{b2}}{a2}}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r138628 = a1;
double r138629 = a2;
double r138630 = r138628 * r138629;
double r138631 = b1;
double r138632 = b2;
double r138633 = r138631 * r138632;
double r138634 = r138630 / r138633;
return r138634;
}
double f(double a1, double a2, double b1, double b2) {
double r138635 = a1;
double r138636 = a2;
double r138637 = r138635 * r138636;
double r138638 = -1.9488936089356344e+196;
bool r138639 = r138637 <= r138638;
double r138640 = b1;
double r138641 = r138635 / r138640;
double r138642 = b2;
double r138643 = r138636 / r138642;
double r138644 = r138641 * r138643;
double r138645 = -2.2186014698312083e-177;
bool r138646 = r138637 <= r138645;
double r138647 = 1.0;
double r138648 = r138640 * r138642;
double r138649 = r138648 / r138637;
double r138650 = r138647 / r138649;
double r138651 = 5.0261210713449556e-270;
bool r138652 = r138637 <= r138651;
double r138653 = cbrt(r138635);
double r138654 = cbrt(r138642);
double r138655 = r138654 * r138654;
double r138656 = r138655 / r138653;
double r138657 = r138653 / r138656;
double r138658 = r138657 / r138640;
double r138659 = r138654 / r138636;
double r138660 = r138653 / r138659;
double r138661 = r138658 * r138660;
double r138662 = 6.895199432649532e+155;
bool r138663 = r138637 <= r138662;
double r138664 = r138637 / r138640;
double r138665 = r138664 / r138642;
double r138666 = r138663 ? r138665 : r138661;
double r138667 = r138652 ? r138661 : r138666;
double r138668 = r138646 ? r138650 : r138667;
double r138669 = r138639 ? r138644 : r138668;
return r138669;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.4 |
|---|---|
| Target | 11.5 |
| Herbie | 5.0 |
if (* a1 a2) < -1.9488936089356344e+196Initial program 34.8
rmApplied times-frac10.5
if -1.9488936089356344e+196 < (* a1 a2) < -2.2186014698312083e-177Initial program 4.8
rmApplied clear-num5.0
if -2.2186014698312083e-177 < (* a1 a2) < 5.0261210713449556e-270 or 6.895199432649532e+155 < (* a1 a2) Initial program 18.8
rmApplied associate-/l*10.0
rmApplied *-un-lft-identity10.0
Applied times-frac6.1
Applied *-un-lft-identity6.1
Applied times-frac9.9
Simplified9.9
rmApplied *-un-lft-identity9.9
Applied add-cube-cbrt10.4
Applied times-frac10.4
Applied add-cube-cbrt10.5
Applied times-frac9.8
Applied associate-*r*5.0
Simplified5.0
if 5.0261210713449556e-270 < (* a1 a2) < 6.895199432649532e+155Initial program 4.3
rmApplied associate-/r*3.9
Final simplification5.0
herbie shell --seed 2019362
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))