\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -7.352417922295524642864555630196818267831 \cdot 10^{161}:\\
\;\;\;\;\frac{a1}{b2 \cdot \frac{b1}{a2}}\\
\mathbf{elif}\;a1 \cdot a2 \le -2.829997385631305936289034491170991223182 \cdot 10^{-269}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.482196937523739632529706378604664117095 \cdot 10^{-323}:\\
\;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.821164334411188487502242748022045100884 \cdot 10^{272}:\\
\;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{\frac{1}{b1}}{b2}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{a1}{b1} \cdot a2\right) \cdot \frac{1}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r138902 = a1;
double r138903 = a2;
double r138904 = r138902 * r138903;
double r138905 = b1;
double r138906 = b2;
double r138907 = r138905 * r138906;
double r138908 = r138904 / r138907;
return r138908;
}
double f(double a1, double a2, double b1, double b2) {
double r138909 = a1;
double r138910 = a2;
double r138911 = r138909 * r138910;
double r138912 = -7.352417922295525e+161;
bool r138913 = r138911 <= r138912;
double r138914 = b2;
double r138915 = b1;
double r138916 = r138915 / r138910;
double r138917 = r138914 * r138916;
double r138918 = r138909 / r138917;
double r138919 = -2.829997385631306e-269;
bool r138920 = r138911 <= r138919;
double r138921 = r138911 / r138915;
double r138922 = r138921 / r138914;
double r138923 = 1.4821969375237e-323;
bool r138924 = r138911 <= r138923;
double r138925 = r138910 / r138915;
double r138926 = r138925 / r138914;
double r138927 = r138909 * r138926;
double r138928 = 1.8211643344111885e+272;
bool r138929 = r138911 <= r138928;
double r138930 = 1.0;
double r138931 = r138930 / r138915;
double r138932 = r138931 / r138914;
double r138933 = r138911 * r138932;
double r138934 = r138909 / r138915;
double r138935 = r138934 * r138910;
double r138936 = r138930 / r138914;
double r138937 = r138935 * r138936;
double r138938 = r138929 ? r138933 : r138937;
double r138939 = r138924 ? r138927 : r138938;
double r138940 = r138920 ? r138922 : r138939;
double r138941 = r138913 ? r138918 : r138940;
return r138941;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.4 |
|---|---|
| Target | 11.4 |
| Herbie | 6.0 |
if (* a1 a2) < -7.352417922295525e+161Initial program 28.1
rmApplied associate-/r*29.2
rmApplied *-un-lft-identity29.2
Applied times-frac16.4
Applied associate-/l*10.8
Simplified10.4
if -7.352417922295525e+161 < (* a1 a2) < -2.829997385631306e-269Initial program 4.9
rmApplied associate-/r*4.9
if -2.829997385631306e-269 < (* a1 a2) < 1.4821969375237e-323Initial program 19.2
rmApplied associate-/r*19.5
rmApplied *-un-lft-identity19.5
Applied *-un-lft-identity19.5
Applied times-frac7.6
Applied times-frac3.1
Simplified3.1
if 1.4821969375237e-323 < (* a1 a2) < 1.8211643344111885e+272Initial program 5.7
rmApplied associate-/r*5.5
rmApplied *-un-lft-identity5.5
Applied div-inv5.6
Applied times-frac5.9
Simplified5.9
if 1.8211643344111885e+272 < (* a1 a2) Initial program 50.7
rmApplied times-frac9.8
rmApplied div-inv9.9
Applied associate-*r*20.1
Final simplification6.0
herbie shell --seed 2019350
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))