\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -3.994607886164469 \cdot 10^{+285}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -8.15908135962733 \cdot 10^{-136}:\\
\;\;\;\;\frac{1}{\frac{b2 \cdot b1}{a1 \cdot a2}}\\
\mathbf{elif}\;a1 \cdot a2 \le -1.189043301750101 \cdot 10^{-232}:\\
\;\;\;\;\frac{\frac{1}{\frac{b1}{a1 \cdot a2}}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 4.98603927195009 \cdot 10^{-194}:\\
\;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.9296454068039114 \cdot 10^{+193}:\\
\;\;\;\;\frac{\frac{1}{\frac{b1}{a1 \cdot a2}}}{b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{\frac{b2 \cdot b1}{a2}}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r5221346 = a1;
double r5221347 = a2;
double r5221348 = r5221346 * r5221347;
double r5221349 = b1;
double r5221350 = b2;
double r5221351 = r5221349 * r5221350;
double r5221352 = r5221348 / r5221351;
return r5221352;
}
double f(double a1, double a2, double b1, double b2) {
double r5221353 = a1;
double r5221354 = a2;
double r5221355 = r5221353 * r5221354;
double r5221356 = -3.994607886164469e+285;
bool r5221357 = r5221355 <= r5221356;
double r5221358 = b1;
double r5221359 = r5221353 / r5221358;
double r5221360 = b2;
double r5221361 = r5221354 / r5221360;
double r5221362 = r5221359 * r5221361;
double r5221363 = -8.15908135962733e-136;
bool r5221364 = r5221355 <= r5221363;
double r5221365 = 1.0;
double r5221366 = r5221360 * r5221358;
double r5221367 = r5221366 / r5221355;
double r5221368 = r5221365 / r5221367;
double r5221369 = -1.189043301750101e-232;
bool r5221370 = r5221355 <= r5221369;
double r5221371 = r5221358 / r5221355;
double r5221372 = r5221365 / r5221371;
double r5221373 = r5221372 / r5221360;
double r5221374 = 4.98603927195009e-194;
bool r5221375 = r5221355 <= r5221374;
double r5221376 = r5221354 / r5221358;
double r5221377 = r5221376 / r5221360;
double r5221378 = r5221353 * r5221377;
double r5221379 = 1.9296454068039114e+193;
bool r5221380 = r5221355 <= r5221379;
double r5221381 = r5221366 / r5221354;
double r5221382 = r5221353 / r5221381;
double r5221383 = r5221380 ? r5221373 : r5221382;
double r5221384 = r5221375 ? r5221378 : r5221383;
double r5221385 = r5221370 ? r5221373 : r5221384;
double r5221386 = r5221364 ? r5221368 : r5221385;
double r5221387 = r5221357 ? r5221362 : r5221386;
return r5221387;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.0 |
|---|---|
| Target | 10.8 |
| Herbie | 5.5 |
if (* a1 a2) < -3.994607886164469e+285Initial program 52.8
rmApplied times-frac7.8
if -3.994607886164469e+285 < (* a1 a2) < -8.15908135962733e-136Initial program 4.8
rmApplied clear-num5.0
if -8.15908135962733e-136 < (* a1 a2) < -1.189043301750101e-232 or 4.98603927195009e-194 < (* a1 a2) < 1.9296454068039114e+193Initial program 4.9
rmApplied associate-/r*3.7
rmApplied clear-num4.0
if -1.189043301750101e-232 < (* a1 a2) < 4.98603927195009e-194Initial program 14.6
rmApplied associate-/r*15.2
rmApplied *-un-lft-identity15.2
Applied *-un-lft-identity15.2
Applied times-frac7.9
Applied times-frac4.5
Simplified4.5
if 1.9296454068039114e+193 < (* a1 a2) Initial program 33.2
rmApplied associate-/l*18.1
Final simplification5.5
herbie shell --seed 2019158 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))