\frac{b \cdot c - a \cdot d}{c \cdot c + d \cdot d}\begin{array}{l}
\mathbf{if}\;b \le -61.10607895990863625002020853571593761444 \lor \neg \left(b \le 1.310939369483501924587354661839021785547 \cdot 10^{-16}\right):\\
\;\;\;\;\frac{b}{c + \frac{d}{\frac{c}{d}}} - \frac{a}{d + \frac{c \cdot c}{d}}\\
\mathbf{else}:\\
\;\;\;\;\frac{b}{\frac{d \cdot d}{c} + c} - \frac{a}{d + c \cdot \frac{c}{d}}\\
\end{array}double f(double a, double b, double c, double d) {
double r59245 = b;
double r59246 = c;
double r59247 = r59245 * r59246;
double r59248 = a;
double r59249 = d;
double r59250 = r59248 * r59249;
double r59251 = r59247 - r59250;
double r59252 = r59246 * r59246;
double r59253 = r59249 * r59249;
double r59254 = r59252 + r59253;
double r59255 = r59251 / r59254;
return r59255;
}
double f(double a, double b, double c, double d) {
double r59256 = b;
double r59257 = -61.106078959908636;
bool r59258 = r59256 <= r59257;
double r59259 = 1.310939369483502e-16;
bool r59260 = r59256 <= r59259;
double r59261 = !r59260;
bool r59262 = r59258 || r59261;
double r59263 = c;
double r59264 = d;
double r59265 = r59263 / r59264;
double r59266 = r59264 / r59265;
double r59267 = r59263 + r59266;
double r59268 = r59256 / r59267;
double r59269 = a;
double r59270 = r59263 * r59263;
double r59271 = r59270 / r59264;
double r59272 = r59264 + r59271;
double r59273 = r59269 / r59272;
double r59274 = r59268 - r59273;
double r59275 = r59264 * r59264;
double r59276 = r59275 / r59263;
double r59277 = r59276 + r59263;
double r59278 = r59256 / r59277;
double r59279 = r59263 * r59265;
double r59280 = r59264 + r59279;
double r59281 = r59269 / r59280;
double r59282 = r59278 - r59281;
double r59283 = r59262 ? r59274 : r59282;
return r59283;
}




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus d
Results
| Original | 26.5 |
|---|---|
| Target | 0.4 |
| Herbie | 4.3 |
if b < -61.106078959908636 or 1.310939369483502e-16 < b Initial program 32.8
rmApplied div-sub32.8
Simplified30.2
Simplified28.4
Taylor expanded around 0 16.0
Simplified16.0
Taylor expanded around 0 8.8
Simplified8.8
rmApplied *-un-lft-identity8.8
Applied *-un-lft-identity8.8
Applied times-frac8.8
Simplified8.8
Simplified4.9
if -61.106078959908636 < b < 1.310939369483502e-16Initial program 20.2
rmApplied div-sub20.2
Simplified19.7
Simplified18.3
Taylor expanded around 0 15.8
Simplified15.8
Taylor expanded around 0 7.3
Simplified7.3
rmApplied *-un-lft-identity7.3
Applied times-frac3.8
Simplified3.8
Final simplification4.3
herbie shell --seed 2019196
(FPCore (a b c d)
:name "Complex division, imag part"
:herbie-target
(if (< (fabs d) (fabs c)) (/ (- b (* a (/ d c))) (+ c (* d (/ d c)))) (/ (+ (- a) (* b (/ c d))) (+ d (* c (/ c d)))))
(/ (- (* b c) (* a d)) (+ (* c c) (* d d))))