\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -3.879073760322599450066672914765923053393 \cdot 10^{110}:\\
\;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\
\mathbf{elif}\;b1 \cdot b2 \le -7.378249179097892230367951646605555713051 \cdot 10^{-128}:\\
\;\;\;\;\frac{a1}{\frac{b1 \cdot b2}{a2}}\\
\mathbf{elif}\;b1 \cdot b2 \le 4.490723890911153990498532039302970574827 \cdot 10^{-250}:\\
\;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\
\mathbf{elif}\;b1 \cdot b2 \le 1.150194457634113342149620175619745181399 \cdot 10^{213}:\\
\;\;\;\;\frac{a1}{\frac{b1 \cdot b2}{a2}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r118991 = a1;
double r118992 = a2;
double r118993 = r118991 * r118992;
double r118994 = b1;
double r118995 = b2;
double r118996 = r118994 * r118995;
double r118997 = r118993 / r118996;
return r118997;
}
double f(double a1, double a2, double b1, double b2) {
double r118998 = b1;
double r118999 = b2;
double r119000 = r118998 * r118999;
double r119001 = -3.8790737603225995e+110;
bool r119002 = r119000 <= r119001;
double r119003 = a1;
double r119004 = r119003 / r118998;
double r119005 = a2;
double r119006 = r118999 / r119005;
double r119007 = r119004 / r119006;
double r119008 = -7.378249179097892e-128;
bool r119009 = r119000 <= r119008;
double r119010 = r119000 / r119005;
double r119011 = r119003 / r119010;
double r119012 = 4.490723890911154e-250;
bool r119013 = r119000 <= r119012;
double r119014 = 1.1501944576341133e+213;
bool r119015 = r119000 <= r119014;
double r119016 = r119003 * r119005;
double r119017 = r119016 / r118998;
double r119018 = r119017 / r118999;
double r119019 = r119015 ? r119011 : r119018;
double r119020 = r119013 ? r119007 : r119019;
double r119021 = r119009 ? r119011 : r119020;
double r119022 = r119002 ? r119007 : r119021;
return r119022;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.5 |
|---|---|
| Target | 11.8 |
| Herbie | 6.3 |
if (* b1 b2) < -3.8790737603225995e+110 or -7.378249179097892e-128 < (* b1 b2) < 4.490723890911154e-250Initial program 19.9
rmApplied associate-/l*20.1
rmApplied *-un-lft-identity20.1
Applied times-frac12.5
Applied associate-/r*8.5
Simplified8.5
if -3.8790737603225995e+110 < (* b1 b2) < -7.378249179097892e-128 or 4.490723890911154e-250 < (* b1 b2) < 1.1501944576341133e+213Initial program 4.3
rmApplied associate-/l*4.2
rmApplied *-un-lft-identity4.2
if 1.1501944576341133e+213 < (* b1 b2) Initial program 17.0
rmApplied associate-/r*8.2
Final simplification6.3
herbie shell --seed 2019235
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))