\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\
\;\;\;\;\frac{a1 \cdot \frac{a2}{b1}}{b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -3.0991765939 \cdot 10^{-315}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -0.0:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 8.3923045265864167 \cdot 10^{294}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r102472 = a1;
double r102473 = a2;
double r102474 = r102472 * r102473;
double r102475 = b1;
double r102476 = b2;
double r102477 = r102475 * r102476;
double r102478 = r102474 / r102477;
return r102478;
}
double f(double a1, double a2, double b1, double b2) {
double r102479 = a1;
double r102480 = a2;
double r102481 = r102479 * r102480;
double r102482 = b1;
double r102483 = b2;
double r102484 = r102482 * r102483;
double r102485 = r102481 / r102484;
double r102486 = -inf.0;
bool r102487 = r102485 <= r102486;
double r102488 = r102480 / r102482;
double r102489 = r102479 * r102488;
double r102490 = r102489 / r102483;
double r102491 = -3.099176593887e-315;
bool r102492 = r102485 <= r102491;
double r102493 = -0.0;
bool r102494 = r102485 <= r102493;
double r102495 = r102479 / r102482;
double r102496 = r102480 / r102483;
double r102497 = r102495 * r102496;
double r102498 = 8.392304526586417e+294;
bool r102499 = r102485 <= r102498;
double r102500 = r102499 ? r102485 : r102497;
double r102501 = r102494 ? r102497 : r102500;
double r102502 = r102492 ? r102485 : r102501;
double r102503 = r102487 ? r102490 : r102502;
return r102503;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.3 |
|---|---|
| Target | 11.3 |
| Herbie | 2.4 |
if (/ (* a1 a2) (* b1 b2)) < -inf.0Initial program 64.0
rmApplied times-frac11.1
rmApplied associate-*r/15.8
rmApplied div-inv15.8
Applied associate-*l*15.8
Simplified15.8
if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -3.099176593887e-315 or -0.0 < (/ (* a1 a2) (* b1 b2)) < 8.392304526586417e+294Initial program 3.8
if -3.099176593887e-315 < (/ (* a1 a2) (* b1 b2)) < -0.0 or 8.392304526586417e+294 < (/ (* a1 a2) (* b1 b2)) Initial program 27.9
rmApplied times-frac4.4
Final simplification2.4
herbie shell --seed 2020021
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))