Average Error: 31.9 → 17.9
Time: 1.9s
Precision: binary64
Cost: 14532
\[\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}\]
\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;
}

Error

Bits error versus re

Bits error versus im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Alternatives

Alternative 1
Error24.3
Cost9032
\[\begin{array}{l} \mathbf{if}\;im \leq -3.7950197651783404 \cdot 10^{-56}:\\ \;\;\;\;\log \left(-im\right)\\ \mathbf{elif}\;im \leq -6.712818192590907 \cdot 10^{-128}:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;im \leq -1.351762837341562 \cdot 10^{-141}:\\ \;\;\;\;\log \left(-im\right)\\ \mathbf{elif}\;im \leq -2.767746290757107 \cdot 10^{-239}:\\ \;\;\;\;\log re\\ \mathbf{elif}\;im \leq -5.52221829366117 \cdot 10^{-269}:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;im \leq 1.2889267588399383 \cdot 10^{-284}:\\ \;\;\;\;\log re\\ \mathbf{elif}\;im \leq 3.037982307213383 \cdot 10^{-272}:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;im \leq 6.773503526495245 \cdot 10^{-175}:\\ \;\;\;\;\log re\\ \mathbf{else}:\\ \;\;\;\;\log im\\ \end{array}\]
Alternative 2
Error25.3
Cost7106
\[\begin{array}{l} \mathbf{if}\;re \leq -2.2994343133152607 \cdot 10^{-58}:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;re \leq 8.051461312866246 \cdot 10^{-176}:\\ \;\;\;\;\log im\\ \mathbf{else}:\\ \;\;\;\;\log re\\ \end{array}\]
Alternative 3
Error35.8
Cost6785
\[\begin{array}{l} \mathbf{if}\;re \leq 2.1844885096186875 \cdot 10^{-173}:\\ \;\;\;\;\log im\\ \mathbf{else}:\\ \;\;\;\;\log re\\ \end{array}\]
Alternative 4
Error43.0
Cost6785
\[\begin{array}{l} \mathbf{if}\;re \leq 2.37128760059021 \cdot 10^{-309}:\\ \;\;\;\;1\\ \mathbf{else}:\\ \;\;\;\;\log re\\ \end{array}\]
Alternative 5
Error57.0
Cost64
\[1\]

Error

Derivation

  1. Split input into 4 regimes
  2. if re < -7.957190502393604e89

    1. Initial program 49.6

      \[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
    2. Taylor expanded around -inf 10.0

      \[\leadsto \log \color{blue}{\left(-1 \cdot re\right)}\]
    3. Simplified10.0

      \[\leadsto \log \color{blue}{\left(-re\right)}\]
    4. Simplified10.0

      \[\leadsto \color{blue}{\log \left(-re\right)}\]

    if -7.957190502393604e89 < re < -3.39641731810312884e-304 or 1.5808915944341867e-181 < re < 3.55150489390180262e132

    1. Initial program 19.9

      \[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
    2. Simplified19.9

      \[\leadsto \color{blue}{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}\]

    if -3.39641731810312884e-304 < re < 1.5808915944341867e-181

    1. Initial program 32.1

      \[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
    2. Taylor expanded around -inf 33.6

      \[\leadsto \log \color{blue}{\left(-1 \cdot im\right)}\]
    3. Simplified33.6

      \[\leadsto \log \color{blue}{\left(-im\right)}\]
    4. Simplified33.6

      \[\leadsto \color{blue}{\log \left(-im\right)}\]

    if 3.55150489390180262e132 < re

    1. Initial program 58.4

      \[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
    2. Taylor expanded around inf 7.7

      \[\leadsto \log \color{blue}{re}\]
    3. Simplified7.7

      \[\leadsto \color{blue}{\log re}\]
  3. Recombined 4 regimes into one program.
  4. Final simplification17.9

    \[\leadsto \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}\]

Reproduce

herbie shell --seed 2021044 
(FPCore (re im)
  :name "math.log/1 on complex, real part"
  :precision binary64
  (log (sqrt (+ (* re re) (* im im)))))