\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -1.741067738673537939167608822187447910972 \cdot 10^{131}:\\
\;\;\;\;\frac{a1}{b2} \cdot \frac{a2}{b1}\\
\mathbf{elif}\;b1 \cdot b2 \le -1.160438436830115127650758241442701919848 \cdot 10^{-242}:\\
\;\;\;\;\frac{a2}{b1 \cdot b2} \cdot a1\\
\mathbf{elif}\;b1 \cdot b2 \le 1.207660505247444569564751128982598390884 \cdot 10^{-309}:\\
\;\;\;\;\frac{\frac{1}{\sqrt[3]{b1}}}{\sqrt[3]{b1}} \cdot \left(\left(\left(\sqrt[3]{a2} \cdot \sqrt[3]{a2}\right) \cdot \frac{\frac{1}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}}}{\sqrt[3]{\sqrt[3]{b1} \cdot \sqrt[3]{b1}}}\right) \cdot \frac{\frac{a1}{\sqrt[3]{b2}}}{\frac{\sqrt[3]{\sqrt[3]{b1}}}{\sqrt[3]{a2}}}\right)\\
\mathbf{elif}\;b1 \cdot b2 \le 5.01380293571370106165791780789048119467 \cdot 10^{135}:\\
\;\;\;\;\left(a2 \cdot a1\right) \cdot \frac{1}{b1 \cdot b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{b2} \cdot \frac{a2}{b1}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r228204 = a1;
double r228205 = a2;
double r228206 = r228204 * r228205;
double r228207 = b1;
double r228208 = b2;
double r228209 = r228207 * r228208;
double r228210 = r228206 / r228209;
return r228210;
}
double f(double a1, double a2, double b1, double b2) {
double r228211 = b1;
double r228212 = b2;
double r228213 = r228211 * r228212;
double r228214 = -1.741067738673538e+131;
bool r228215 = r228213 <= r228214;
double r228216 = a1;
double r228217 = r228216 / r228212;
double r228218 = a2;
double r228219 = r228218 / r228211;
double r228220 = r228217 * r228219;
double r228221 = -1.1604384368301151e-242;
bool r228222 = r228213 <= r228221;
double r228223 = r228218 / r228213;
double r228224 = r228223 * r228216;
double r228225 = 1.207660505247445e-309;
bool r228226 = r228213 <= r228225;
double r228227 = 1.0;
double r228228 = cbrt(r228211);
double r228229 = r228227 / r228228;
double r228230 = r228229 / r228228;
double r228231 = cbrt(r228218);
double r228232 = r228231 * r228231;
double r228233 = cbrt(r228212);
double r228234 = r228233 * r228233;
double r228235 = r228227 / r228234;
double r228236 = r228228 * r228228;
double r228237 = cbrt(r228236);
double r228238 = r228235 / r228237;
double r228239 = r228232 * r228238;
double r228240 = r228216 / r228233;
double r228241 = cbrt(r228228);
double r228242 = r228241 / r228231;
double r228243 = r228240 / r228242;
double r228244 = r228239 * r228243;
double r228245 = r228230 * r228244;
double r228246 = 5.013802935713701e+135;
bool r228247 = r228213 <= r228246;
double r228248 = r228218 * r228216;
double r228249 = r228227 / r228213;
double r228250 = r228248 * r228249;
double r228251 = r228247 ? r228250 : r228220;
double r228252 = r228226 ? r228245 : r228251;
double r228253 = r228222 ? r228224 : r228252;
double r228254 = r228215 ? r228220 : r228253;
return r228254;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.3 |
|---|---|
| Target | 11.3 |
| Herbie | 5.4 |
if (* b1 b2) < -1.741067738673538e+131 or 5.013802935713701e+135 < (* b1 b2) Initial program 13.6
rmApplied associate-/r*8.8
Simplified6.6
rmApplied *-un-lft-identity6.6
Applied *-un-lft-identity6.6
Applied add-cube-cbrt7.1
Applied times-frac7.1
Applied *-un-lft-identity7.1
Applied times-frac7.4
Applied times-frac7.3
Simplified7.3
Simplified5.7
rmApplied add-cube-cbrt5.8
Applied add-cube-cbrt5.8
Applied cbrt-prod5.9
Applied times-frac5.8
Applied add-cube-cbrt5.9
Applied *-un-lft-identity5.9
Applied times-frac5.9
Applied times-frac3.4
Simplified3.4
Taylor expanded around 0 13.6
Simplified6.2
if -1.741067738673538e+131 < (* b1 b2) < -1.1604384368301151e-242Initial program 3.7
Simplified5.0
if -1.1604384368301151e-242 < (* b1 b2) < 1.207660505247445e-309Initial program 48.3
rmApplied associate-/r*17.4
Simplified8.7
rmApplied *-un-lft-identity8.7
Applied *-un-lft-identity8.7
Applied add-cube-cbrt9.7
Applied times-frac9.7
Applied *-un-lft-identity9.7
Applied times-frac13.0
Applied times-frac13.0
Simplified13.1
Simplified8.4
rmApplied add-cube-cbrt8.6
Applied add-cube-cbrt8.6
Applied cbrt-prod8.7
Applied times-frac8.7
Applied add-cube-cbrt8.9
Applied *-un-lft-identity8.9
Applied times-frac8.9
Applied times-frac4.5
Simplified4.5
if 1.207660505247445e-309 < (* b1 b2) < 5.013802935713701e+135Initial program 4.8
rmApplied div-inv5.0
Simplified5.0
Final simplification5.4
herbie shell --seed 2019194
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))