\frac{b \cdot c - a \cdot d}{c \cdot c + d \cdot d}\begin{array}{l}
\mathbf{if}\;c \le -2.7774429101464625 \cdot 10^{124}:\\
\;\;\;\;\frac{-b}{\mathsf{hypot}\left(c, d\right)}\\
\mathbf{elif}\;c \le 5.3202544266061094 \cdot 10^{154}:\\
\;\;\;\;\frac{\frac{\mathsf{fma}\left(b, c, -a \cdot d\right)}{\mathsf{hypot}\left(c, d\right)}}{\mathsf{hypot}\left(c, d\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{b}{\mathsf{hypot}\left(c, d\right)}\\
\end{array}double f(double a, double b, double c, double d) {
double r101385 = b;
double r101386 = c;
double r101387 = r101385 * r101386;
double r101388 = a;
double r101389 = d;
double r101390 = r101388 * r101389;
double r101391 = r101387 - r101390;
double r101392 = r101386 * r101386;
double r101393 = r101389 * r101389;
double r101394 = r101392 + r101393;
double r101395 = r101391 / r101394;
return r101395;
}
double f(double a, double b, double c, double d) {
double r101396 = c;
double r101397 = -2.7774429101464625e+124;
bool r101398 = r101396 <= r101397;
double r101399 = b;
double r101400 = -r101399;
double r101401 = d;
double r101402 = hypot(r101396, r101401);
double r101403 = r101400 / r101402;
double r101404 = 5.3202544266061094e+154;
bool r101405 = r101396 <= r101404;
double r101406 = a;
double r101407 = r101406 * r101401;
double r101408 = -r101407;
double r101409 = fma(r101399, r101396, r101408);
double r101410 = r101409 / r101402;
double r101411 = r101410 / r101402;
double r101412 = r101399 / r101402;
double r101413 = r101405 ? r101411 : r101412;
double r101414 = r101398 ? r101403 : r101413;
return r101414;
}




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus d
| Original | 26.0 |
|---|---|
| Target | 0.5 |
| Herbie | 12.6 |
if c < -2.7774429101464625e+124Initial program 41.0
Simplified41.0
rmApplied add-sqr-sqrt41.0
Applied *-un-lft-identity41.0
Applied times-frac41.0
Simplified41.0
Simplified27.1
rmApplied pow127.1
Applied pow127.1
Applied pow-prod-down27.1
Simplified27.0
Taylor expanded around -inf 15.6
Simplified15.6
if -2.7774429101464625e+124 < c < 5.3202544266061094e+154Initial program 18.9
Simplified18.9
rmApplied add-sqr-sqrt18.9
Applied *-un-lft-identity18.9
Applied times-frac18.9
Simplified18.9
Simplified11.9
rmApplied pow111.9
Applied pow111.9
Applied pow-prod-down11.9
Simplified11.7
if 5.3202544266061094e+154 < c Initial program 46.2
Simplified46.2
rmApplied add-sqr-sqrt46.2
Applied *-un-lft-identity46.2
Applied times-frac46.2
Simplified46.2
Simplified28.4
rmApplied pow128.4
Applied pow128.4
Applied pow-prod-down28.4
Simplified28.3
Taylor expanded around inf 13.4
Final simplification12.6
herbie shell --seed 2020045 +o rules:numerics
(FPCore (a b c d)
:name "Complex division, imag part"
:precision binary64
: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))))