\log \left(\sqrt{re \cdot re + im \cdot im}\right)\begin{array}{l}
\mathbf{if}\;re \leq -7.957190502393604 \cdot 10^{+89}:\\
\;\;\;\;\log \left(-re\right)\\
\mathbf{elif}\;re \leq -3.396417318103129 \cdot 10^{-304}:\\
\;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\
\mathbf{elif}\;re \leq 1.5808915944341867 \cdot 10^{-181}:\\
\;\;\;\;\log \left(-im\right)\\
\mathbf{elif}\;re \leq 3.5515048939018026 \cdot 10^{+132}:\\
\;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\
\mathbf{else}:\\
\;\;\;\;\log re\\
\end{array}(FPCore (re im) :precision binary64 (log (sqrt (+ (* re re) (* im im)))))
(FPCore (re im)
:precision binary64
(if (<= re -7.957190502393604e+89)
(log (- re))
(if (<= re -3.396417318103129e-304)
(log (sqrt (+ (* re re) (* im im))))
(if (<= re 1.5808915944341867e-181)
(log (- im))
(if (<= re 3.5515048939018026e+132)
(log (sqrt (+ (* re re) (* im im))))
(log re))))))double code(double re, double im) {
return log(sqrt((re * re) + (im * im)));
}
double code(double re, double im) {
double tmp;
if (re <= -7.957190502393604e+89) {
tmp = log(-re);
} else if (re <= -3.396417318103129e-304) {
tmp = log(sqrt((re * re) + (im * im)));
} else if (re <= 1.5808915944341867e-181) {
tmp = log(-im);
} else if (re <= 3.5515048939018026e+132) {
tmp = log(sqrt((re * re) + (im * im)));
} else {
tmp = log(re);
}
return tmp;
}








Bits error versus re








Bits error versus im
Results
| Alternative 1 | |
|---|---|
| Error | 24.3 |
| Cost | 9032 |
| Alternative 2 | |
|---|---|
| Error | 25.3 |
| Cost | 7106 |
| Alternative 3 | |
|---|---|
| Error | 35.8 |
| Cost | 6785 |
| Alternative 4 | |
|---|---|
| Error | 43.0 |
| Cost | 6785 |
| Alternative 5 | |
|---|---|
| Error | 57.0 |
| Cost | 64 |

if re < -7.957190502393604e89Initial program 49.6
Taylor expanded around -inf 10.0
Simplified10.0
Simplified10.0
if -7.957190502393604e89 < re < -3.39641731810312884e-304 or 1.5808915944341867e-181 < re < 3.55150489390180262e132Initial program 19.9
Simplified19.9
if -3.39641731810312884e-304 < re < 1.5808915944341867e-181Initial program 32.1
Taylor expanded around -inf 33.6
Simplified33.6
Simplified33.6
if 3.55150489390180262e132 < re Initial program 58.4
Taylor expanded around inf 7.7
Simplified7.7
Final simplification17.9
herbie shell --seed 2021044
(FPCore (re im)
:name "math.log/1 on complex, real part"
:precision binary64
(log (sqrt (+ (* re re) (* im im)))))