\log \left(\sqrt{re \cdot re + im \cdot im}\right)\begin{array}{l}
\mathbf{if}\;re \leq -6.0797067422693544 \cdot 10^{+85}:\\
\;\;\;\;\log \left(-re\right)\\
\mathbf{elif}\;re \leq -3.466869228507893 \cdot 10^{-172}:\\
\;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\
\mathbf{elif}\;re \leq -3.283714079027123 \cdot 10^{-236}:\\
\;\;\;\;\log \left(\left(im + 0.5 \cdot \frac{re \cdot re}{im}\right) - 0.125 \cdot \left(re \cdot {\left(\frac{re}{im}\right)}^{3}\right)\right)\\
\mathbf{elif}\;re \leq 2.0246090950680006 \cdot 10^{-222}:\\
\;\;\;\;\log \left(-im\right)\\
\mathbf{elif}\;re \leq 6.851137618913075 \cdot 10^{-132}:\\
\;\;\;\;\log im\\
\mathbf{elif}\;re \leq 0.0003766592687471088:\\
\;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\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 -6.0797067422693544e+85)
(log (- re))
(if (<= re -3.466869228507893e-172)
(log (sqrt (+ (* im im) (* re re))))
(if (<= re -3.283714079027123e-236)
(log
(-
(+ im (* 0.5 (/ (* re re) im)))
(* 0.125 (* re (pow (/ re im) 3.0)))))
(if (<= re 2.0246090950680006e-222)
(log (- im))
(if (<= re 6.851137618913075e-132)
(log im)
(if (<= re 0.0003766592687471088)
(log (sqrt (+ (* im im) (* re re))))
(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 <= -6.0797067422693544e+85) {
tmp = log(-re);
} else if (re <= -3.466869228507893e-172) {
tmp = log(sqrt((im * im) + (re * re)));
} else if (re <= -3.283714079027123e-236) {
tmp = log((im + (0.5 * ((re * re) / im))) - (0.125 * (re * pow((re / im), 3.0))));
} else if (re <= 2.0246090950680006e-222) {
tmp = log(-im);
} else if (re <= 6.851137618913075e-132) {
tmp = log(im);
} else if (re <= 0.0003766592687471088) {
tmp = log(sqrt((im * im) + (re * re)));
} else {
tmp = log(re);
}
return tmp;
}













Bits error versus re













Bits error versus im
Results
| Alternative 1 | |
|---|---|
| Error | 49.0 |
| Cost | 13952 |
| Alternative 2 | |
|---|---|
| Error | 48.1 |
| Cost | 13952 |
| Alternative 3 | |
|---|---|
| Error | 32.2 |
| Cost | 13248 |
| Alternative 4 | |
|---|---|
| Error | 46.8 |
| Cost | 6528 |
| Alternative 5 | |
|---|---|
| Error | 46.2 |
| Cost | 6528 |
| Alternative 6 | |
|---|---|
| Error | 46.9 |
| Cost | 6464 |
| Alternative 7 | |
|---|---|
| Error | 46.0 |
| Cost | 6464 |
| Alternative 8 | |
|---|---|
| Error | 57.0 |
| Cost | 64 |
| Alternative 9 | |
|---|---|
| Error | 62.0 |
| Cost | 64 |
| Alternative 10 | |
|---|---|
| Error | 60.9 |
| Cost | 64 |

if re < -6.0797067422693544e85Initial program 49.9
Taylor expanded around -inf 10.0
Simplified10.0
Simplified10.0
if -6.0797067422693544e85 < re < -3.4668692285078929e-172 or 6.851137618913075e-132 < re < 3.76659268747108822e-4Initial program 16.6
Simplified16.6
if -3.4668692285078929e-172 < re < -3.2837140790271231e-236Initial program 31.2
Taylor expanded around 0 40.7
Simplified35.9
Simplified35.9
if -3.2837140790271231e-236 < re < 2.0246090950680006e-222Initial program 31.3
Taylor expanded around -inf 33.3
Simplified33.3
Simplified33.3
if 2.0246090950680006e-222 < re < 6.851137618913075e-132Initial program 27.2
Taylor expanded around 0 35.0
Simplified35.0
if 3.76659268747108822e-4 < re Initial program 40.8
Taylor expanded around inf 13.1
Simplified13.1
Final simplification19.1
herbie shell --seed 2021042
(FPCore (re im)
:name "math.log/1 on complex, real part"
:precision binary64
(log (sqrt (+ (* re re) (* im im)))))