\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\
\;\;\;\;\frac{a1}{\frac{b2}{a2}} \cdot \frac{1}{b1}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -1.510660628541362523085079504704820761096 \cdot 10^{-304}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0:\\
\;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 4.062070660904123924003450791510692331407 \cdot 10^{231}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{\frac{b2}{a2}} \cdot \frac{1}{b1}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r5268914 = a1;
double r5268915 = a2;
double r5268916 = r5268914 * r5268915;
double r5268917 = b1;
double r5268918 = b2;
double r5268919 = r5268917 * r5268918;
double r5268920 = r5268916 / r5268919;
return r5268920;
}
double f(double a1, double a2, double b1, double b2) {
double r5268921 = a1;
double r5268922 = a2;
double r5268923 = r5268921 * r5268922;
double r5268924 = b1;
double r5268925 = b2;
double r5268926 = r5268924 * r5268925;
double r5268927 = r5268923 / r5268926;
double r5268928 = -inf.0;
bool r5268929 = r5268927 <= r5268928;
double r5268930 = r5268925 / r5268922;
double r5268931 = r5268921 / r5268930;
double r5268932 = 1.0;
double r5268933 = r5268932 / r5268924;
double r5268934 = r5268931 * r5268933;
double r5268935 = -1.5106606285413625e-304;
bool r5268936 = r5268927 <= r5268935;
double r5268937 = 0.0;
bool r5268938 = r5268927 <= r5268937;
double r5268939 = r5268922 / r5268924;
double r5268940 = r5268939 / r5268925;
double r5268941 = r5268921 * r5268940;
double r5268942 = 4.062070660904124e+231;
bool r5268943 = r5268927 <= r5268942;
double r5268944 = r5268943 ? r5268927 : r5268934;
double r5268945 = r5268938 ? r5268941 : r5268944;
double r5268946 = r5268936 ? r5268927 : r5268945;
double r5268947 = r5268929 ? r5268934 : r5268946;
return r5268947;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.4 |
|---|---|
| Target | 11.1 |
| Herbie | 3.8 |
if (/ (* a1 a2) (* b1 b2)) < -inf.0 or 4.062070660904124e+231 < (/ (* a1 a2) (* b1 b2)) Initial program 51.9
rmApplied associate-/r*38.8
rmApplied clear-num38.8
rmApplied *-un-lft-identity38.8
Applied div-inv39.3
Applied add-cube-cbrt39.3
Applied times-frac39.4
Applied times-frac40.0
Simplified40.0
Simplified15.8
if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -1.5106606285413625e-304 or 0.0 < (/ (* a1 a2) (* b1 b2)) < 4.062070660904124e+231Initial program 0.9
if -1.5106606285413625e-304 < (/ (* a1 a2) (* b1 b2)) < 0.0Initial program 13.2
rmApplied associate-/r*5.9
rmApplied *-un-lft-identity5.9
Applied *-un-lft-identity5.9
Applied times-frac3.2
Applied times-frac3.9
Simplified3.9
Final simplification3.8
herbie shell --seed 2019174
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))