\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -4.331097236289201929838111566058261923975 \cdot 10^{-312} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0\right) \land \frac{a1 \cdot a2}{b1 \cdot b2} \le 2.759064889840746628621735483350290847538 \cdot 10^{303}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a2}{b2} \cdot \frac{a1}{b1}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r189565 = a1;
double r189566 = a2;
double r189567 = r189565 * r189566;
double r189568 = b1;
double r189569 = b2;
double r189570 = r189568 * r189569;
double r189571 = r189567 / r189570;
return r189571;
}
double f(double a1, double a2, double b1, double b2) {
double r189572 = a1;
double r189573 = a2;
double r189574 = r189572 * r189573;
double r189575 = b1;
double r189576 = b2;
double r189577 = r189575 * r189576;
double r189578 = r189574 / r189577;
double r189579 = -inf.0;
bool r189580 = r189578 <= r189579;
double r189581 = r189574 / r189575;
double r189582 = r189581 / r189576;
double r189583 = -4.3310972362892e-312;
bool r189584 = r189578 <= r189583;
double r189585 = 0.0;
bool r189586 = r189578 <= r189585;
double r189587 = !r189586;
double r189588 = 2.7590648898407466e+303;
bool r189589 = r189578 <= r189588;
bool r189590 = r189587 && r189589;
bool r189591 = r189584 || r189590;
double r189592 = r189573 / r189576;
double r189593 = r189572 / r189575;
double r189594 = r189592 * r189593;
double r189595 = r189591 ? r189578 : r189594;
double r189596 = r189580 ? r189582 : r189595;
return r189596;
}




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.6 |
if (/ (* a1 a2) (* b1 b2)) < -inf.0Initial program 64.0
rmApplied associate-/r*28.8
if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -4.3310972362892e-312 or 0.0 < (/ (* a1 a2) (* b1 b2)) < 2.7590648898407466e+303Initial program 3.4
if -4.3310972362892e-312 < (/ (* a1 a2) (* b1 b2)) < 0.0 or 2.7590648898407466e+303 < (/ (* a1 a2) (* b1 b2)) Initial program 29.3
Taylor expanded around 0 29.3
Simplified3.6
Final simplification2.6
herbie shell --seed 2019194 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))