| Alternative 1 | |
|---|---|
| Error | 15.22% |
| Cost | 8400 |
(FPCore (a b c d) :precision binary64 (/ (+ (* a c) (* b d)) (+ (* c c) (* d d))))
(FPCore (a b c d)
:precision binary64
(let* ((t_0 (+ (/ a c) (/ d (+ (* c (/ c b)) (* d (/ d b)))))))
(if (<= d -2.4e-47)
(* (+ b (/ c (/ d a))) (/ -1.0 (hypot c d)))
(if (<= d 2.7e-207)
(+ (/ a c) (/ (* b (/ d c)) c))
(if (<= d 5.9e-77)
(* (/ 1.0 (hypot c d)) (/ (fma a c (* d b)) (hypot c d)))
(if (<= d 2.85e-33)
t_0
(if (<= d 4.2e+19)
(/ (+ (* d b) (* c a)) (+ (* c c) (* d d)))
(if (<= d 1.5e+113) t_0 (+ (/ b d) (* (/ a d) (/ c d)))))))))))double code(double a, double b, double c, double d) {
return ((a * c) + (b * d)) / ((c * c) + (d * d));
}
double code(double a, double b, double c, double d) {
double t_0 = (a / c) + (d / ((c * (c / b)) + (d * (d / b))));
double tmp;
if (d <= -2.4e-47) {
tmp = (b + (c / (d / a))) * (-1.0 / hypot(c, d));
} else if (d <= 2.7e-207) {
tmp = (a / c) + ((b * (d / c)) / c);
} else if (d <= 5.9e-77) {
tmp = (1.0 / hypot(c, d)) * (fma(a, c, (d * b)) / hypot(c, d));
} else if (d <= 2.85e-33) {
tmp = t_0;
} else if (d <= 4.2e+19) {
tmp = ((d * b) + (c * a)) / ((c * c) + (d * d));
} else if (d <= 1.5e+113) {
tmp = t_0;
} else {
tmp = (b / d) + ((a / d) * (c / d));
}
return tmp;
}
function code(a, b, c, d) return Float64(Float64(Float64(a * c) + Float64(b * d)) / Float64(Float64(c * c) + Float64(d * d))) end
function code(a, b, c, d) t_0 = Float64(Float64(a / c) + Float64(d / Float64(Float64(c * Float64(c / b)) + Float64(d * Float64(d / b))))) tmp = 0.0 if (d <= -2.4e-47) tmp = Float64(Float64(b + Float64(c / Float64(d / a))) * Float64(-1.0 / hypot(c, d))); elseif (d <= 2.7e-207) tmp = Float64(Float64(a / c) + Float64(Float64(b * Float64(d / c)) / c)); elseif (d <= 5.9e-77) tmp = Float64(Float64(1.0 / hypot(c, d)) * Float64(fma(a, c, Float64(d * b)) / hypot(c, d))); elseif (d <= 2.85e-33) tmp = t_0; elseif (d <= 4.2e+19) tmp = Float64(Float64(Float64(d * b) + Float64(c * a)) / Float64(Float64(c * c) + Float64(d * d))); elseif (d <= 1.5e+113) tmp = t_0; else tmp = Float64(Float64(b / d) + Float64(Float64(a / d) * Float64(c / d))); end return tmp end
code[a_, b_, c_, d_] := N[(N[(N[(a * c), $MachinePrecision] + N[(b * d), $MachinePrecision]), $MachinePrecision] / N[(N[(c * c), $MachinePrecision] + N[(d * d), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
code[a_, b_, c_, d_] := Block[{t$95$0 = N[(N[(a / c), $MachinePrecision] + N[(d / N[(N[(c * N[(c / b), $MachinePrecision]), $MachinePrecision] + N[(d * N[(d / b), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[d, -2.4e-47], N[(N[(b + N[(c / N[(d / a), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(-1.0 / N[Sqrt[c ^ 2 + d ^ 2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 2.7e-207], N[(N[(a / c), $MachinePrecision] + N[(N[(b * N[(d / c), $MachinePrecision]), $MachinePrecision] / c), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 5.9e-77], N[(N[(1.0 / N[Sqrt[c ^ 2 + d ^ 2], $MachinePrecision]), $MachinePrecision] * N[(N[(a * c + N[(d * b), $MachinePrecision]), $MachinePrecision] / N[Sqrt[c ^ 2 + d ^ 2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 2.85e-33], t$95$0, If[LessEqual[d, 4.2e+19], N[(N[(N[(d * b), $MachinePrecision] + N[(c * a), $MachinePrecision]), $MachinePrecision] / N[(N[(c * c), $MachinePrecision] + N[(d * d), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d, 1.5e+113], t$95$0, N[(N[(b / d), $MachinePrecision] + N[(N[(a / d), $MachinePrecision] * N[(c / d), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]
\frac{a \cdot c + b \cdot d}{c \cdot c + d \cdot d}
\begin{array}{l}
t_0 := \frac{a}{c} + \frac{d}{c \cdot \frac{c}{b} + d \cdot \frac{d}{b}}\\
\mathbf{if}\;d \leq -2.4 \cdot 10^{-47}:\\
\;\;\;\;\left(b + \frac{c}{\frac{d}{a}}\right) \cdot \frac{-1}{\mathsf{hypot}\left(c, d\right)}\\
\mathbf{elif}\;d \leq 2.7 \cdot 10^{-207}:\\
\;\;\;\;\frac{a}{c} + \frac{b \cdot \frac{d}{c}}{c}\\
\mathbf{elif}\;d \leq 5.9 \cdot 10^{-77}:\\
\;\;\;\;\frac{1}{\mathsf{hypot}\left(c, d\right)} \cdot \frac{\mathsf{fma}\left(a, c, d \cdot b\right)}{\mathsf{hypot}\left(c, d\right)}\\
\mathbf{elif}\;d \leq 2.85 \cdot 10^{-33}:\\
\;\;\;\;t_0\\
\mathbf{elif}\;d \leq 4.2 \cdot 10^{+19}:\\
\;\;\;\;\frac{d \cdot b + c \cdot a}{c \cdot c + d \cdot d}\\
\mathbf{elif}\;d \leq 1.5 \cdot 10^{+113}:\\
\;\;\;\;t_0\\
\mathbf{else}:\\
\;\;\;\;\frac{b}{d} + \frac{a}{d} \cdot \frac{c}{d}\\
\end{array}
| Original | 40.99% |
|---|---|
| Target | 1.04% |
| Herbie | 21.95% |
if d < -2.3999999999999999e-47Initial program 48.17
Applied egg-rr33.51
Taylor expanded in d around -inf 30.7
Simplified27.04
[Start]30.7 | \[ \frac{1}{\mathsf{hypot}\left(c, d\right)} \cdot \left(-1 \cdot b + -1 \cdot \frac{c \cdot a}{d}\right)
\] |
|---|---|
distribute-lft-out [=>]30.7 | \[ \frac{1}{\mathsf{hypot}\left(c, d\right)} \cdot \color{blue}{\left(-1 \cdot \left(b + \frac{c \cdot a}{d}\right)\right)}
\] |
associate-/l* [=>]27.04 | \[ \frac{1}{\mathsf{hypot}\left(c, d\right)} \cdot \left(-1 \cdot \left(b + \color{blue}{\frac{c}{\frac{d}{a}}}\right)\right)
\] |
if -2.3999999999999999e-47 < d < 2.7e-207Initial program 33.29
Applied egg-rr19.42
Taylor expanded in c around inf 18.75
Simplified14.6
[Start]18.75 | \[ \frac{a}{c} + \frac{d \cdot b}{{c}^{2}}
\] |
|---|---|
*-commutative [<=]18.75 | \[ \frac{a}{c} + \frac{\color{blue}{b \cdot d}}{{c}^{2}}
\] |
unpow2 [=>]18.75 | \[ \frac{a}{c} + \frac{b \cdot d}{\color{blue}{c \cdot c}}
\] |
associate-/r* [=>]14.2 | \[ \frac{a}{c} + \color{blue}{\frac{\frac{b \cdot d}{c}}{c}}
\] |
*-commutative [=>]14.2 | \[ \frac{a}{c} + \frac{\frac{\color{blue}{d \cdot b}}{c}}{c}
\] |
associate-/l* [=>]15.62 | \[ \frac{a}{c} + \frac{\color{blue}{\frac{d}{\frac{c}{b}}}}{c}
\] |
associate-/r/ [=>]14.6 | \[ \frac{a}{c} + \frac{\color{blue}{\frac{d}{c} \cdot b}}{c}
\] |
if 2.7e-207 < d < 5.89999999999999965e-77Initial program 27.58
Applied egg-rr16.31
if 5.89999999999999965e-77 < d < 2.85000000000000013e-33 or 4.2e19 < d < 1.5e113Initial program 27.6
Taylor expanded in a around 0 27.6
Simplified23.95
[Start]27.6 | \[ \frac{d \cdot b}{{d}^{2} + {c}^{2}} + \frac{c \cdot a}{{d}^{2} + {c}^{2}}
\] |
|---|---|
associate-/l* [=>]24.75 | \[ \color{blue}{\frac{d}{\frac{{d}^{2} + {c}^{2}}{b}}} + \frac{c \cdot a}{{d}^{2} + {c}^{2}}
\] |
unpow2 [=>]24.75 | \[ \frac{d}{\frac{\color{blue}{d \cdot d} + {c}^{2}}{b}} + \frac{c \cdot a}{{d}^{2} + {c}^{2}}
\] |
unpow2 [=>]24.75 | \[ \frac{d}{\frac{d \cdot d + \color{blue}{c \cdot c}}{b}} + \frac{c \cdot a}{{d}^{2} + {c}^{2}}
\] |
fma-udef [<=]24.75 | \[ \frac{d}{\frac{\color{blue}{\mathsf{fma}\left(d, d, c \cdot c\right)}}{b}} + \frac{c \cdot a}{{d}^{2} + {c}^{2}}
\] |
associate-/l* [=>]23.95 | \[ \frac{d}{\frac{\mathsf{fma}\left(d, d, c \cdot c\right)}{b}} + \color{blue}{\frac{c}{\frac{{d}^{2} + {c}^{2}}{a}}}
\] |
unpow2 [=>]23.95 | \[ \frac{d}{\frac{\mathsf{fma}\left(d, d, c \cdot c\right)}{b}} + \frac{c}{\frac{\color{blue}{d \cdot d} + {c}^{2}}{a}}
\] |
unpow2 [=>]23.95 | \[ \frac{d}{\frac{\mathsf{fma}\left(d, d, c \cdot c\right)}{b}} + \frac{c}{\frac{d \cdot d + \color{blue}{c \cdot c}}{a}}
\] |
fma-udef [<=]23.95 | \[ \frac{d}{\frac{\mathsf{fma}\left(d, d, c \cdot c\right)}{b}} + \frac{c}{\frac{\color{blue}{\mathsf{fma}\left(d, d, c \cdot c\right)}}{a}}
\] |
Taylor expanded in d around 0 23.96
Simplified21.16
[Start]23.96 | \[ \frac{d}{\frac{{c}^{2}}{b} + \frac{{d}^{2}}{b}} + \frac{c}{\frac{\mathsf{fma}\left(d, d, c \cdot c\right)}{a}}
\] |
|---|---|
unpow2 [=>]23.96 | \[ \frac{d}{\frac{\color{blue}{c \cdot c}}{b} + \frac{{d}^{2}}{b}} + \frac{c}{\frac{\mathsf{fma}\left(d, d, c \cdot c\right)}{a}}
\] |
/-rgt-identity [<=]23.96 | \[ \frac{d}{\frac{c \cdot c}{\color{blue}{\frac{b}{1}}} + \frac{{d}^{2}}{b}} + \frac{c}{\frac{\mathsf{fma}\left(d, d, c \cdot c\right)}{a}}
\] |
associate-/l* [<=]23.96 | \[ \frac{d}{\color{blue}{\frac{\left(c \cdot c\right) \cdot 1}{b}} + \frac{{d}^{2}}{b}} + \frac{c}{\frac{\mathsf{fma}\left(d, d, c \cdot c\right)}{a}}
\] |
associate-*r/ [<=]23.96 | \[ \frac{d}{\color{blue}{\left(c \cdot c\right) \cdot \frac{1}{b}} + \frac{{d}^{2}}{b}} + \frac{c}{\frac{\mathsf{fma}\left(d, d, c \cdot c\right)}{a}}
\] |
associate-*l* [=>]21.16 | \[ \frac{d}{\color{blue}{c \cdot \left(c \cdot \frac{1}{b}\right)} + \frac{{d}^{2}}{b}} + \frac{c}{\frac{\mathsf{fma}\left(d, d, c \cdot c\right)}{a}}
\] |
associate-*r/ [=>]21.15 | \[ \frac{d}{c \cdot \color{blue}{\frac{c \cdot 1}{b}} + \frac{{d}^{2}}{b}} + \frac{c}{\frac{\mathsf{fma}\left(d, d, c \cdot c\right)}{a}}
\] |
*-rgt-identity [=>]21.15 | \[ \frac{d}{c \cdot \frac{\color{blue}{c}}{b} + \frac{{d}^{2}}{b}} + \frac{c}{\frac{\mathsf{fma}\left(d, d, c \cdot c\right)}{a}}
\] |
unpow2 [=>]21.15 | \[ \frac{d}{c \cdot \frac{c}{b} + \frac{\color{blue}{d \cdot d}}{b}} + \frac{c}{\frac{\mathsf{fma}\left(d, d, c \cdot c\right)}{a}}
\] |
*-rgt-identity [<=]21.15 | \[ \frac{d}{c \cdot \frac{c}{b} + \frac{\color{blue}{\left(d \cdot d\right) \cdot 1}}{b}} + \frac{c}{\frac{\mathsf{fma}\left(d, d, c \cdot c\right)}{a}}
\] |
associate-*r/ [<=]21.21 | \[ \frac{d}{c \cdot \frac{c}{b} + \color{blue}{\left(d \cdot d\right) \cdot \frac{1}{b}}} + \frac{c}{\frac{\mathsf{fma}\left(d, d, c \cdot c\right)}{a}}
\] |
associate-*l* [=>]21.21 | \[ \frac{d}{c \cdot \frac{c}{b} + \color{blue}{d \cdot \left(d \cdot \frac{1}{b}\right)}} + \frac{c}{\frac{\mathsf{fma}\left(d, d, c \cdot c\right)}{a}}
\] |
associate-*r/ [=>]21.16 | \[ \frac{d}{c \cdot \frac{c}{b} + d \cdot \color{blue}{\frac{d \cdot 1}{b}}} + \frac{c}{\frac{\mathsf{fma}\left(d, d, c \cdot c\right)}{a}}
\] |
*-rgt-identity [=>]21.16 | \[ \frac{d}{c \cdot \frac{c}{b} + d \cdot \frac{\color{blue}{d}}{b}} + \frac{c}{\frac{\mathsf{fma}\left(d, d, c \cdot c\right)}{a}}
\] |
Taylor expanded in c around inf 41.66
if 2.85000000000000013e-33 < d < 4.2e19Initial program 22.2
if 1.5e113 < d Initial program 63.64
Taylor expanded in c around 0 24.07
Simplified14.37
[Start]24.07 | \[ \frac{b}{d} + \frac{c \cdot a}{{d}^{2}}
\] |
|---|---|
*-commutative [<=]24.07 | \[ \frac{b}{d} + \frac{\color{blue}{a \cdot c}}{{d}^{2}}
\] |
unpow2 [=>]24.07 | \[ \frac{b}{d} + \frac{a \cdot c}{\color{blue}{d \cdot d}}
\] |
times-frac [=>]14.37 | \[ \frac{b}{d} + \color{blue}{\frac{a}{d} \cdot \frac{c}{d}}
\] |
Final simplification21.95
| Alternative 1 | |
|---|---|
| Error | 15.22% |
| Cost | 8400 |
| Alternative 2 | |
|---|---|
| Error | 22.86% |
| Cost | 7300 |
| Alternative 3 | |
|---|---|
| Error | 23.22% |
| Cost | 1880 |
| Alternative 4 | |
|---|---|
| Error | 23.42% |
| Cost | 1484 |
| Alternative 5 | |
|---|---|
| Error | 24.63% |
| Cost | 1356 |
| Alternative 6 | |
|---|---|
| Error | 32.72% |
| Cost | 969 |
| Alternative 7 | |
|---|---|
| Error | 26.81% |
| Cost | 969 |
| Alternative 8 | |
|---|---|
| Error | 25.9% |
| Cost | 969 |
| Alternative 9 | |
|---|---|
| Error | 25.71% |
| Cost | 969 |
| Alternative 10 | |
|---|---|
| Error | 37.13% |
| Cost | 456 |
| Alternative 11 | |
|---|---|
| Error | 58.42% |
| Cost | 192 |
herbie shell --seed 2023090
(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))))