\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -4.604958784251808198840015507538373981042 \cdot 10^{191}:\\
\;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -2.354693224406461136834790790699340112959 \cdot 10^{-271}:\\
\;\;\;\;\frac{1}{b1} \cdot \frac{a1 \cdot a2}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 4.193005295802932340834729742793829018686 \cdot 10^{-316}:\\
\;\;\;\;\frac{a1}{\sqrt[3]{b1} \cdot \sqrt[3]{b1}} \cdot \frac{\frac{a2}{\sqrt[3]{b1}}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 3.515727156315485723303824540710871575854 \cdot 10^{273}:\\
\;\;\;\;\frac{1}{b1} \cdot \frac{a1 \cdot a2}{b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r203262 = a1;
double r203263 = a2;
double r203264 = r203262 * r203263;
double r203265 = b1;
double r203266 = b2;
double r203267 = r203265 * r203266;
double r203268 = r203264 / r203267;
return r203268;
}
double f(double a1, double a2, double b1, double b2) {
double r203269 = a1;
double r203270 = a2;
double r203271 = r203269 * r203270;
double r203272 = -4.604958784251808e+191;
bool r203273 = r203271 <= r203272;
double r203274 = b1;
double r203275 = r203270 / r203274;
double r203276 = b2;
double r203277 = r203275 / r203276;
double r203278 = r203269 * r203277;
double r203279 = -2.3546932244064611e-271;
bool r203280 = r203271 <= r203279;
double r203281 = 1.0;
double r203282 = r203281 / r203274;
double r203283 = r203271 / r203276;
double r203284 = r203282 * r203283;
double r203285 = 4.1930052958029e-316;
bool r203286 = r203271 <= r203285;
double r203287 = cbrt(r203274);
double r203288 = r203287 * r203287;
double r203289 = r203269 / r203288;
double r203290 = r203270 / r203287;
double r203291 = r203290 / r203276;
double r203292 = r203289 * r203291;
double r203293 = 3.5157271563154857e+273;
bool r203294 = r203271 <= r203293;
double r203295 = r203269 / r203274;
double r203296 = r203270 / r203276;
double r203297 = r203295 * r203296;
double r203298 = r203294 ? r203284 : r203297;
double r203299 = r203286 ? r203292 : r203298;
double r203300 = r203280 ? r203284 : r203299;
double r203301 = r203273 ? r203278 : r203300;
return r203301;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 10.8 |
|---|---|
| Target | 11.5 |
| Herbie | 5.0 |
if (* a1 a2) < -4.604958784251808e+191Initial program 32.1
rmApplied associate-/r*34.0
rmApplied *-un-lft-identity34.0
Applied *-un-lft-identity34.0
Applied times-frac18.2
Applied times-frac8.5
Simplified8.5
if -4.604958784251808e+191 < (* a1 a2) < -2.3546932244064611e-271 or 4.1930052958029e-316 < (* a1 a2) < 3.5157271563154857e+273Initial program 4.7
rmApplied associate-/r*5.2
rmApplied clear-num5.6
rmApplied *-un-lft-identity5.6
Applied div-inv5.7
Applied add-cube-cbrt5.7
Applied times-frac5.4
Applied times-frac5.2
Simplified5.2
Simplified5.1
if -2.3546932244064611e-271 < (* a1 a2) < 4.1930052958029e-316Initial program 18.5
rmApplied associate-/r*18.2
rmApplied *-un-lft-identity18.2
Applied add-cube-cbrt18.3
Applied times-frac8.1
Applied times-frac2.2
Simplified2.2
if 3.5157271563154857e+273 < (* a1 a2) Initial program 52.1
rmApplied times-frac7.1
Final simplification5.0
herbie shell --seed 2019322
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))