\frac{a \cdot c + b \cdot d}{c \cdot c + d \cdot d}\begin{array}{l}
\mathbf{if}\;\frac{a \cdot c + b \cdot d}{c \cdot c + d \cdot d} \le 5.1588593744494812 \cdot 10^{245}:\\
\;\;\;\;\frac{a \cdot c + b \cdot d}{c \cdot c + d \cdot d}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\sqrt{c \cdot c + d \cdot d}} \cdot \left(-1 \cdot a\right)\\
\end{array}double f(double a, double b, double c, double d) {
double r105135 = a;
double r105136 = c;
double r105137 = r105135 * r105136;
double r105138 = b;
double r105139 = d;
double r105140 = r105138 * r105139;
double r105141 = r105137 + r105140;
double r105142 = r105136 * r105136;
double r105143 = r105139 * r105139;
double r105144 = r105142 + r105143;
double r105145 = r105141 / r105144;
return r105145;
}
double f(double a, double b, double c, double d) {
double r105146 = a;
double r105147 = c;
double r105148 = r105146 * r105147;
double r105149 = b;
double r105150 = d;
double r105151 = r105149 * r105150;
double r105152 = r105148 + r105151;
double r105153 = r105147 * r105147;
double r105154 = r105150 * r105150;
double r105155 = r105153 + r105154;
double r105156 = r105152 / r105155;
double r105157 = 5.158859374449481e+245;
bool r105158 = r105156 <= r105157;
double r105159 = 1.0;
double r105160 = sqrt(r105155);
double r105161 = r105159 / r105160;
double r105162 = -1.0;
double r105163 = r105162 * r105146;
double r105164 = r105161 * r105163;
double r105165 = r105158 ? r105156 : r105164;
return r105165;
}




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus d
Results
| Original | 26.5 |
|---|---|
| Target | 0.5 |
| Herbie | 26.3 |
if (/ (+ (* a c) (* b d)) (+ (* c c) (* d d))) < 5.158859374449481e+245Initial program 14.6
if 5.158859374449481e+245 < (/ (+ (* a c) (* b d)) (+ (* c c) (* d d))) Initial program 60.6
rmApplied add-sqr-sqrt60.6
Applied *-un-lft-identity60.6
Applied times-frac60.6
Taylor expanded around -inf 60.1
Final simplification26.3
herbie shell --seed 2020057
(FPCore (a b c d)
:name "Complex division, real part"
:precision binary64
:herbie-target
(if (< (fabs d) (fabs c)) (/ (+ a (* b (/ d c))) (+ c (* d (/ d c)))) (/ (+ b (* a (/ c d))) (+ d (* c (/ c d)))))
(/ (+ (* a c) (* b d)) (+ (* c c) (* d d))))