double f(double a1, double a2, double b1, double b2) {
double r21057794 = a1;
double r21057795 = a2;
double r21057796 = r21057794 * r21057795;
double r21057797 = b1;
double r21057798 = b2;
double r21057799 = r21057797 * r21057798;
double r21057800 = r21057796 / r21057799;
return r21057800;
}
double f(double a1, double a2, double b1, double b2) {
double r21057801 = b1;
double r21057802 = b2;
double r21057803 = r21057801 * r21057802;
double r21057804 = -4.967958916173717e+118;
bool r21057805 = r21057803 <= r21057804;
double r21057806 = a1;
double r21057807 = a2;
double r21057808 = cbrt(r21057807);
double r21057809 = r21057802 / r21057808;
double r21057810 = r21057806 / r21057809;
double r21057811 = r21057808 * r21057808;
double r21057812 = r21057811 / r21057801;
double r21057813 = r21057810 * r21057812;
double r21057814 = -2.577332261011133e-120;
bool r21057815 = r21057803 <= r21057814;
double r21057816 = r21057806 / r21057803;
double r21057817 = r21057816 * r21057807;
double r21057818 = 2.1107718134298e-217;
bool r21057819 = r21057803 <= r21057818;
double r21057820 = r21057806 / r21057802;
double r21057821 = r21057807 * r21057820;
double r21057822 = r21057821 / r21057801;
double r21057823 = 7.378312823211572e+229;
bool r21057824 = r21057803 <= r21057823;
double r21057825 = r21057806 / r21057801;
double r21057826 = r21057807 / r21057802;
double r21057827 = r21057825 * r21057826;
double r21057828 = r21057824 ? r21057817 : r21057827;
double r21057829 = r21057819 ? r21057822 : r21057828;
double r21057830 = r21057815 ? r21057817 : r21057829;
double r21057831 = r21057805 ? r21057813 : r21057830;
return r21057831;
}
\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -4.967958916173717 \cdot 10^{+118}:\\
\;\;\;\;\frac{a1}{\frac{b2}{\sqrt[3]{a2}}} \cdot \frac{\sqrt[3]{a2} \cdot \sqrt[3]{a2}}{b1}\\
\mathbf{elif}\;b1 \cdot b2 \le -2.577332261011133 \cdot 10^{-120}:\\
\;\;\;\;\frac{a1}{b1 \cdot b2} \cdot a2\\
\mathbf{elif}\;b1 \cdot b2 \le 2.1107718134298 \cdot 10^{-217}:\\
\;\;\;\;\frac{a2 \cdot \frac{a1}{b2}}{b1}\\
\mathbf{elif}\;b1 \cdot b2 \le 7.378312823211572 \cdot 10^{+229}:\\
\;\;\;\;\frac{a1}{b1 \cdot b2} \cdot a2\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\end{array}



Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
| Original | 11.4 |
|---|---|
| Target | 10.8 |
| Herbie | 5.4 |
if (* b1 b2) < -4.967958916173717e+118Initial program 13.2
rmApplied associate-/l*12.9
rmApplied add-cube-cbrt13.2
Applied times-frac8.8
Applied *-un-lft-identity8.8
Applied times-frac6.1
Simplified5.9
if -4.967958916173717e+118 < (* b1 b2) < -2.577332261011133e-120 or 2.1107718134298e-217 < (* b1 b2) < 7.378312823211572e+229Initial program 4.3
rmApplied associate-/l*3.9
rmApplied associate-/r/4.0
if -2.577332261011133e-120 < (* b1 b2) < 2.1107718134298e-217Initial program 25.8
rmApplied associate-/l*24.3
rmApplied add-cube-cbrt24.9
Applied times-frac14.0
Applied *-un-lft-identity14.0
Applied times-frac9.3
Simplified9.3
rmApplied associate-*l/10.1
Simplified10.6
if 7.378312823211572e+229 < (* b1 b2) Initial program 17.0
rmApplied times-frac3.0
Final simplification5.4
herbie shell --seed 2019102 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))