\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -9.78621637012035120889222133129827862576 \cdot 10^{209}:\\
\;\;\;\;\frac{1}{b1 \cdot \frac{\frac{b2}{a2}}{a1}}\\
\mathbf{elif}\;b1 \cdot b2 \le -9.111280530104685398727222154888263046467 \cdot 10^{-184}:\\
\;\;\;\;\frac{\frac{\sqrt[3]{a1} \cdot \sqrt[3]{a1}}{b1 \cdot b2}}{\frac{\frac{1}{a2}}{\sqrt[3]{a1}}}\\
\mathbf{elif}\;b1 \cdot b2 \le 4.74006580620091934483000099877771584647 \cdot 10^{-320}:\\
\;\;\;\;\frac{1}{b1 \cdot \frac{\frac{b2}{a2}}{a1}}\\
\mathbf{elif}\;b1 \cdot b2 \le 2.58951826059365596639353360952197188632 \cdot 10^{173}:\\
\;\;\;\;\frac{\frac{\sqrt[3]{a1} \cdot \sqrt[3]{a1}}{b1 \cdot b2}}{\frac{\frac{1}{a2}}{\sqrt[3]{a1}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r77040 = a1;
double r77041 = a2;
double r77042 = r77040 * r77041;
double r77043 = b1;
double r77044 = b2;
double r77045 = r77043 * r77044;
double r77046 = r77042 / r77045;
return r77046;
}
double f(double a1, double a2, double b1, double b2) {
double r77047 = b1;
double r77048 = b2;
double r77049 = r77047 * r77048;
double r77050 = -9.786216370120351e+209;
bool r77051 = r77049 <= r77050;
double r77052 = 1.0;
double r77053 = a2;
double r77054 = r77048 / r77053;
double r77055 = a1;
double r77056 = r77054 / r77055;
double r77057 = r77047 * r77056;
double r77058 = r77052 / r77057;
double r77059 = -9.111280530104685e-184;
bool r77060 = r77049 <= r77059;
double r77061 = cbrt(r77055);
double r77062 = r77061 * r77061;
double r77063 = r77062 / r77049;
double r77064 = r77052 / r77053;
double r77065 = r77064 / r77061;
double r77066 = r77063 / r77065;
double r77067 = 4.7400658062009e-320;
bool r77068 = r77049 <= r77067;
double r77069 = 2.589518260593656e+173;
bool r77070 = r77049 <= r77069;
double r77071 = r77055 / r77047;
double r77072 = r77053 / r77048;
double r77073 = r77071 * r77072;
double r77074 = r77070 ? r77066 : r77073;
double r77075 = r77068 ? r77058 : r77074;
double r77076 = r77060 ? r77066 : r77075;
double r77077 = r77051 ? r77058 : r77076;
return r77077;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.6 |
|---|---|
| Target | 11.4 |
| Herbie | 4.6 |
if (* b1 b2) < -9.786216370120351e+209 or -9.111280530104685e-184 < (* b1 b2) < 4.7400658062009e-320Initial program 25.7
rmApplied associate-/l*25.3
rmApplied clear-num25.4
rmApplied *-un-lft-identity25.4
Applied *-un-lft-identity25.4
Applied times-frac12.9
Applied times-frac6.7
Simplified6.7
if -9.786216370120351e+209 < (* b1 b2) < -9.111280530104685e-184 or 4.7400658062009e-320 < (* b1 b2) < 2.589518260593656e+173Initial program 5.2
rmApplied associate-/l*5.1
rmApplied clear-num5.5
rmApplied add-cube-cbrt6.2
Applied div-inv6.2
Applied times-frac3.7
Applied associate-/r*3.6
Simplified3.6
if 2.589518260593656e+173 < (* b1 b2) Initial program 16.0
rmApplied times-frac5.3
Final simplification4.6
herbie shell --seed 2019323
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))