double f(double a1, double a2, double b1, double b2) {
double r37458681 = a1;
double r37458682 = a2;
double r37458683 = r37458681 * r37458682;
double r37458684 = b1;
double r37458685 = b2;
double r37458686 = r37458684 * r37458685;
double r37458687 = r37458683 / r37458686;
return r37458687;
}
double f(double a1, double a2, double b1, double b2) {
double r37458688 = b1;
double r37458689 = b2;
double r37458690 = r37458688 * r37458689;
double r37458691 = -4.967958916173717e+118;
bool r37458692 = r37458690 <= r37458691;
double r37458693 = a1;
double r37458694 = a2;
double r37458695 = cbrt(r37458694);
double r37458696 = r37458689 / r37458695;
double r37458697 = r37458693 / r37458696;
double r37458698 = r37458695 * r37458695;
double r37458699 = r37458698 / r37458688;
double r37458700 = r37458697 * r37458699;
double r37458701 = -2.577332261011133e-120;
bool r37458702 = r37458690 <= r37458701;
double r37458703 = r37458693 / r37458690;
double r37458704 = r37458703 * r37458694;
double r37458705 = 2.1107718134298e-217;
bool r37458706 = r37458690 <= r37458705;
double r37458707 = r37458693 / r37458689;
double r37458708 = r37458694 * r37458707;
double r37458709 = r37458708 / r37458688;
double r37458710 = 7.378312823211572e+229;
bool r37458711 = r37458690 <= r37458710;
double r37458712 = r37458693 / r37458688;
double r37458713 = r37458694 / r37458689;
double r37458714 = r37458712 * r37458713;
double r37458715 = r37458711 ? r37458704 : r37458714;
double r37458716 = r37458706 ? r37458709 : r37458715;
double r37458717 = r37458702 ? r37458704 : r37458716;
double r37458718 = r37458692 ? r37458700 : r37458717;
return r37458718;
}
\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
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))