\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a2 \cdot a1 \le -1.2876487305313636 \cdot 10^{+181}:\\
\;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\
\mathbf{elif}\;a2 \cdot a1 \le -6.385030884325899 \cdot 10^{-218}:\\
\;\;\;\;\frac{a2 \cdot a1}{b1} \cdot \frac{1}{b2}\\
\mathbf{elif}\;a2 \cdot a1 \le 4.775209065579154 \cdot 10^{-193}:\\
\;\;\;\;\frac{a1}{\frac{b2}{\frac{a2}{b1}}}\\
\mathbf{elif}\;a2 \cdot a1 \le 1.1827835492321197 \cdot 10^{+164}:\\
\;\;\;\;\frac{a2 \cdot a1}{b1} \cdot \frac{1}{b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{\frac{b2}{\frac{a2}{b1}}}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r5983460 = a1;
double r5983461 = a2;
double r5983462 = r5983460 * r5983461;
double r5983463 = b1;
double r5983464 = b2;
double r5983465 = r5983463 * r5983464;
double r5983466 = r5983462 / r5983465;
return r5983466;
}
double f(double a1, double a2, double b1, double b2) {
double r5983467 = a2;
double r5983468 = a1;
double r5983469 = r5983467 * r5983468;
double r5983470 = -1.2876487305313636e+181;
bool r5983471 = r5983469 <= r5983470;
double r5983472 = b1;
double r5983473 = r5983467 / r5983472;
double r5983474 = b2;
double r5983475 = r5983473 / r5983474;
double r5983476 = r5983468 * r5983475;
double r5983477 = -6.385030884325899e-218;
bool r5983478 = r5983469 <= r5983477;
double r5983479 = r5983469 / r5983472;
double r5983480 = 1.0;
double r5983481 = r5983480 / r5983474;
double r5983482 = r5983479 * r5983481;
double r5983483 = 4.775209065579154e-193;
bool r5983484 = r5983469 <= r5983483;
double r5983485 = r5983474 / r5983473;
double r5983486 = r5983468 / r5983485;
double r5983487 = 1.1827835492321197e+164;
bool r5983488 = r5983469 <= r5983487;
double r5983489 = r5983488 ? r5983482 : r5983486;
double r5983490 = r5983484 ? r5983486 : r5983489;
double r5983491 = r5983478 ? r5983482 : r5983490;
double r5983492 = r5983471 ? r5983476 : r5983491;
return r5983492;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 10.9 |
|---|---|
| Target | 10.9 |
| Herbie | 5.4 |
if (* a1 a2) < -1.2876487305313636e+181Initial program 29.7
rmApplied associate-/r*31.7
rmApplied *-un-lft-identity31.7
Applied *-un-lft-identity31.7
Applied times-frac19.8
Applied times-frac10.9
Simplified10.9
if -1.2876487305313636e+181 < (* a1 a2) < -6.385030884325899e-218 or 4.775209065579154e-193 < (* a1 a2) < 1.1827835492321197e+164Initial program 4.1
rmApplied associate-/r*4.2
rmApplied *-un-lft-identity4.2
Applied associate-/r*4.2
Simplified11.3
rmApplied associate-*l/4.2
rmApplied div-inv4.3
if -6.385030884325899e-218 < (* a1 a2) < 4.775209065579154e-193 or 1.1827835492321197e+164 < (* a1 a2) Initial program 18.0
rmApplied associate-/r*17.3
rmApplied *-un-lft-identity17.3
Applied times-frac9.7
Applied associate-/l*6.1
Final simplification5.4
herbie shell --seed 2019168 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))