\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -9.384563571355019 \cdot 10^{+255}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;b1 \cdot b2 \le -1.0490423713698057 \cdot 10^{-109}:\\
\;\;\;\;\frac{a1}{\frac{b1 \cdot b2}{a2}}\\
\mathbf{elif}\;b1 \cdot b2 \le 5.934410328828728 \cdot 10^{-246}:\\
\;\;\;\;\frac{a2 \cdot \frac{a1}{b1}}{b2}\\
\mathbf{elif}\;b1 \cdot b2 \le 2.6156936580694473 \cdot 10^{+78}:\\
\;\;\;\;\frac{a1}{\frac{b1 \cdot b2}{a2}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{a1}{\frac{b1}{a2}}}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r32326861 = a1;
double r32326862 = a2;
double r32326863 = r32326861 * r32326862;
double r32326864 = b1;
double r32326865 = b2;
double r32326866 = r32326864 * r32326865;
double r32326867 = r32326863 / r32326866;
return r32326867;
}
double f(double a1, double a2, double b1, double b2) {
double r32326868 = b1;
double r32326869 = b2;
double r32326870 = r32326868 * r32326869;
double r32326871 = -9.384563571355019e+255;
bool r32326872 = r32326870 <= r32326871;
double r32326873 = a1;
double r32326874 = r32326873 / r32326868;
double r32326875 = a2;
double r32326876 = r32326875 / r32326869;
double r32326877 = r32326874 * r32326876;
double r32326878 = -1.0490423713698057e-109;
bool r32326879 = r32326870 <= r32326878;
double r32326880 = r32326870 / r32326875;
double r32326881 = r32326873 / r32326880;
double r32326882 = 5.934410328828728e-246;
bool r32326883 = r32326870 <= r32326882;
double r32326884 = r32326875 * r32326874;
double r32326885 = r32326884 / r32326869;
double r32326886 = 2.6156936580694473e+78;
bool r32326887 = r32326870 <= r32326886;
double r32326888 = r32326868 / r32326875;
double r32326889 = r32326873 / r32326888;
double r32326890 = r32326889 / r32326869;
double r32326891 = r32326887 ? r32326881 : r32326890;
double r32326892 = r32326883 ? r32326885 : r32326891;
double r32326893 = r32326879 ? r32326881 : r32326892;
double r32326894 = r32326872 ? r32326877 : r32326893;
return r32326894;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.1 |
|---|---|
| Target | 11.0 |
| Herbie | 5.6 |
if (* b1 b2) < -9.384563571355019e+255Initial program 17.9
rmApplied associate-/r*8.4
rmApplied associate-/l*3.7
rmApplied *-un-lft-identity3.7
Applied associate-/r/3.7
Applied times-frac2.9
Simplified2.9
if -9.384563571355019e+255 < (* b1 b2) < -1.0490423713698057e-109 or 5.934410328828728e-246 < (* b1 b2) < 2.6156936580694473e+78Initial program 4.8
rmApplied associate-/l*4.1
if -1.0490423713698057e-109 < (* b1 b2) < 5.934410328828728e-246Initial program 25.8
rmApplied associate-/r*15.0
rmApplied associate-/l*11.0
rmApplied associate-/r/9.8
if 2.6156936580694473e+78 < (* b1 b2) Initial program 11.4
rmApplied associate-/r*8.5
rmApplied associate-/l*6.9
Final simplification5.6
herbie shell --seed 2019119 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))