\sqrt{re \cdot re + im \cdot im}\begin{array}{l}
\mathbf{if}\;im \leq -4.1162129695124836 \cdot 10^{+151}:\\
\;\;\;\;-im\\
\mathbf{elif}\;im \leq -2.1964806768619867 \cdot 10^{-223}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{elif}\;im \leq 2.11287353661743 \cdot 10^{-238}:\\
\;\;\;\;-re\\
\mathbf{elif}\;im \leq 7.549554504255097 \cdot 10^{+118}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{else}:\\
\;\;\;\;im\\
\end{array}(FPCore (re im) :precision binary64 (sqrt (+ (* re re) (* im im))))
(FPCore (re im)
:precision binary64
(if (<= im -4.1162129695124836e+151)
(- im)
(if (<= im -2.1964806768619867e-223)
(sqrt (+ (* re re) (* im im)))
(if (<= im 2.11287353661743e-238)
(- re)
(if (<= im 7.549554504255097e+118)
(sqrt (+ (* re re) (* im im)))
im)))))double code(double re, double im) {
return sqrt((re * re) + (im * im));
}
double code(double re, double im) {
double tmp;
if (im <= -4.1162129695124836e+151) {
tmp = -im;
} else if (im <= -2.1964806768619867e-223) {
tmp = sqrt((re * re) + (im * im));
} else if (im <= 2.11287353661743e-238) {
tmp = -re;
} else if (im <= 7.549554504255097e+118) {
tmp = sqrt((re * re) + (im * im));
} else {
tmp = im;
}
return tmp;
}








Bits error versus re








Bits error versus im
Results
| Alternative 1 | |
|---|---|
| Error | 25.7 |
| Cost | 1027 |
| Alternative 2 | |
|---|---|
| Error | 26.5 |
| Cost | 706 |
| Alternative 3 | |
|---|---|
| Error | 36.8 |
| Cost | 1027 |
| Alternative 4 | |
|---|---|
| Error | 46.0 |
| Cost | 385 |
| Alternative 5 | |
|---|---|
| Error | 60.5 |
| Cost | 64 |

if im < -4.11621296951248365e151Initial program 63.7
Taylor expanded around -inf 7.0
Simplified7.0
Simplified7.0
if -4.11621296951248365e151 < im < -2.1964806768619867e-223 or 2.1128735366174298e-238 < im < 7.549554504255097e118Initial program 18.1
Simplified18.1
if -2.1964806768619867e-223 < im < 2.1128735366174298e-238Initial program 30.4
Taylor expanded around -inf 32.4
Simplified32.4
Simplified32.4
if 7.549554504255097e118 < im Initial program 54.8
Taylor expanded around 0 9.5
Simplified9.5
Final simplification17.2
herbie shell --seed 2021044
(FPCore (re im)
:name "math.abs on complex"
:precision binary64
(sqrt (+ (* re re) (* im im))))