\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -3.3079264831196082 \cdot 10^{194} \lor \neg \left(a1 \cdot a2 \le -5.632465143843106 \cdot 10^{-172} \lor \neg \left(a1 \cdot a2 \le 3.7907289754606943 \cdot 10^{-297}\right) \land a1 \cdot a2 \le 4.11512080060718968 \cdot 10^{280}\right):\\
\;\;\;\;a2 \cdot \left(\frac{1}{b1} \cdot \frac{a1}{b2}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{b2 \cdot \frac{b1}{a1 \cdot a2}}\\
\end{array}double code(double a1, double a2, double b1, double b2) {
return ((double) (((double) (a1 * a2)) / ((double) (b1 * b2))));
}
double code(double a1, double a2, double b1, double b2) {
double VAR;
if (((((double) (a1 * a2)) <= -3.307926483119608e+194) || !((((double) (a1 * a2)) <= -5.632465143843106e-172) || (!(((double) (a1 * a2)) <= 3.790728975460694e-297) && (((double) (a1 * a2)) <= 4.11512080060719e+280))))) {
VAR = ((double) (a2 * ((double) (((double) (1.0 / b1)) * ((double) (a1 / b2))))));
} else {
VAR = ((double) (1.0 / ((double) (b2 * ((double) (b1 / ((double) (a1 * a2))))))));
}
return VAR;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.3 |
|---|---|
| Target | 11.4 |
| Herbie | 5.7 |
if (* a1 a2) < -3.3079264831196082e194 or -5.632465143843106e-172 < (* a1 a2) < 3.7907289754606943e-297 or 4.11512080060718968e280 < (* a1 a2) Initial program 23.0
Taylor expanded around 0 23.0
Simplified11.2
rmApplied *-un-lft-identity11.2
Applied times-frac6.1
if -3.3079264831196082e194 < (* a1 a2) < -5.632465143843106e-172 or 3.7907289754606943e-297 < (* a1 a2) < 4.11512080060718968e280Initial program 4.9
rmApplied clear-num5.2
Simplified5.5
Final simplification5.7
herbie shell --seed 2020185
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))