\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -1.4931232845681356 \cdot 10^{168}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -2.0866604942007535 \cdot 10^{-124}:\\
\;\;\;\;\frac{1}{\frac{b2}{\frac{a1 \cdot a2}{b1}}}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.01600999395086732 \cdot 10^{-257}:\\
\;\;\;\;\frac{\frac{\frac{a1}{\sqrt[3]{b1} \cdot \sqrt[3]{b1}}}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \left(\sqrt[3]{a2} \cdot \sqrt[3]{a2}\right)}{\sqrt[3]{\sqrt[3]{b2} \cdot \sqrt[3]{b2}}} \cdot \frac{\frac{\sqrt[3]{a2}}{\sqrt[3]{b1}}}{\sqrt[3]{\sqrt[3]{b2}}}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.59608712487395094 \cdot 10^{126}:\\
\;\;\;\;\frac{1}{\frac{b2}{\frac{a1 \cdot a2}{b1}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{a1}{\sqrt[3]{b1} \cdot \sqrt[3]{b1}}}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{\frac{a2}{\sqrt[3]{b1}}}{\sqrt[3]{b2}}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r174058 = a1;
double r174059 = a2;
double r174060 = r174058 * r174059;
double r174061 = b1;
double r174062 = b2;
double r174063 = r174061 * r174062;
double r174064 = r174060 / r174063;
return r174064;
}
double f(double a1, double a2, double b1, double b2) {
double r174065 = a1;
double r174066 = a2;
double r174067 = r174065 * r174066;
double r174068 = -1.4931232845681356e+168;
bool r174069 = r174067 <= r174068;
double r174070 = b1;
double r174071 = r174065 / r174070;
double r174072 = b2;
double r174073 = r174066 / r174072;
double r174074 = r174071 * r174073;
double r174075 = -2.0866604942007535e-124;
bool r174076 = r174067 <= r174075;
double r174077 = 1.0;
double r174078 = r174067 / r174070;
double r174079 = r174072 / r174078;
double r174080 = r174077 / r174079;
double r174081 = 1.0160099939508673e-257;
bool r174082 = r174067 <= r174081;
double r174083 = cbrt(r174070);
double r174084 = r174083 * r174083;
double r174085 = r174065 / r174084;
double r174086 = cbrt(r174072);
double r174087 = r174086 * r174086;
double r174088 = r174085 / r174087;
double r174089 = cbrt(r174066);
double r174090 = r174089 * r174089;
double r174091 = r174088 * r174090;
double r174092 = cbrt(r174087);
double r174093 = r174091 / r174092;
double r174094 = r174089 / r174083;
double r174095 = cbrt(r174086);
double r174096 = r174094 / r174095;
double r174097 = r174093 * r174096;
double r174098 = 1.596087124873951e+126;
bool r174099 = r174067 <= r174098;
double r174100 = r174066 / r174083;
double r174101 = r174100 / r174086;
double r174102 = r174088 * r174101;
double r174103 = r174099 ? r174080 : r174102;
double r174104 = r174082 ? r174097 : r174103;
double r174105 = r174076 ? r174080 : r174104;
double r174106 = r174069 ? r174074 : r174105;
return r174106;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.6 |
|---|---|
| Target | 11.3 |
| Herbie | 5.0 |
if (* a1 a2) < -1.4931232845681356e+168Initial program 30.4
rmApplied times-frac12.5
if -1.4931232845681356e+168 < (* a1 a2) < -2.0866604942007535e-124 or 1.0160099939508673e-257 < (* a1 a2) < 1.596087124873951e+126Initial program 4.0
rmApplied associate-/r*3.7
rmApplied clear-num4.1
if -2.0866604942007535e-124 < (* a1 a2) < 1.0160099939508673e-257Initial program 14.7
rmApplied associate-/r*14.7
rmApplied add-cube-cbrt15.0
Applied add-cube-cbrt15.1
Applied times-frac8.4
Applied times-frac3.5
rmApplied add-cube-cbrt3.5
Applied cbrt-prod3.6
Applied *-un-lft-identity3.6
Applied add-cube-cbrt3.6
Applied times-frac3.6
Applied times-frac3.0
Applied associate-*r*3.0
Simplified3.0
if 1.596087124873951e+126 < (* a1 a2) Initial program 25.3
rmApplied associate-/r*27.1
rmApplied add-cube-cbrt27.7
Applied add-cube-cbrt27.8
Applied times-frac17.4
Applied times-frac9.4
Final simplification5.0
herbie shell --seed 2020056
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))