\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -8.6323533454543057 \cdot 10^{208}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -1.37354660740668432 \cdot 10^{-150}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.54641561652090935 \cdot 10^{-236}:\\
\;\;\;\;\frac{\frac{a1}{b1}}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{a2}{\sqrt[3]{b2}}\\
\mathbf{elif}\;a1 \cdot a2 \le 8.51127703032407457 \cdot 10^{-153}:\\
\;\;\;\;\frac{a1}{b2 \cdot b1} \cdot a2\\
\mathbf{elif}\;a1 \cdot a2 \le 5.19284675887811351 \cdot 10^{171}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r188563 = a1;
double r188564 = a2;
double r188565 = r188563 * r188564;
double r188566 = b1;
double r188567 = b2;
double r188568 = r188566 * r188567;
double r188569 = r188565 / r188568;
return r188569;
}
double f(double a1, double a2, double b1, double b2) {
double r188570 = a1;
double r188571 = a2;
double r188572 = r188570 * r188571;
double r188573 = -8.632353345454306e+208;
bool r188574 = r188572 <= r188573;
double r188575 = b1;
double r188576 = r188570 / r188575;
double r188577 = b2;
double r188578 = r188571 / r188577;
double r188579 = r188576 * r188578;
double r188580 = -1.3735466074066843e-150;
bool r188581 = r188572 <= r188580;
double r188582 = r188572 / r188575;
double r188583 = r188582 / r188577;
double r188584 = 1.5464156165209094e-236;
bool r188585 = r188572 <= r188584;
double r188586 = cbrt(r188577);
double r188587 = r188586 * r188586;
double r188588 = r188576 / r188587;
double r188589 = r188571 / r188586;
double r188590 = r188588 * r188589;
double r188591 = 8.511277030324075e-153;
bool r188592 = r188572 <= r188591;
double r188593 = r188577 * r188575;
double r188594 = r188570 / r188593;
double r188595 = r188594 * r188571;
double r188596 = 5.1928467588781135e+171;
bool r188597 = r188572 <= r188596;
double r188598 = r188597 ? r188583 : r188579;
double r188599 = r188592 ? r188595 : r188598;
double r188600 = r188585 ? r188590 : r188599;
double r188601 = r188581 ? r188583 : r188600;
double r188602 = r188574 ? r188579 : r188601;
return r188602;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.7 |
|---|---|
| Target | 10.7 |
| Herbie | 5.3 |
if (* a1 a2) < -8.632353345454306e+208 or 5.1928467588781135e+171 < (* a1 a2) Initial program 32.6
rmApplied times-frac9.8
if -8.632353345454306e+208 < (* a1 a2) < -1.3735466074066843e-150 or 8.511277030324075e-153 < (* a1 a2) < 5.1928467588781135e+171Initial program 4.0
rmApplied associate-/r*4.1
if -1.3735466074066843e-150 < (* a1 a2) < 1.5464156165209094e-236Initial program 15.3
rmApplied times-frac4.4
rmApplied add-cube-cbrt4.8
Applied *-un-lft-identity4.8
Applied times-frac4.8
Applied associate-*r*4.4
Simplified4.4
if 1.5464156165209094e-236 < (* a1 a2) < 8.511277030324075e-153Initial program 7.2
rmApplied associate-/l*9.7
Simplified10.9
rmApplied *-commutative10.9
rmApplied associate-*l/9.7
Applied associate-/r/9.5
Final simplification5.3
herbie shell --seed 2020047 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))