Average Error: 32.1 → 19.1
Time: 4.0s
Precision: 64
\[\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}{\log 10}\]
\[\begin{array}{l} \mathbf{if}\;re \le -222.338080097683729:\\ \;\;\;\;\frac{1}{\frac{\log 10}{\log \left(-1 \cdot re\right)}}\\ \mathbf{elif}\;re \le 3.1105424028317862 \cdot 10^{46}:\\ \;\;\;\;\frac{1}{\frac{\log 10}{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\log re}{\log 10}\\ \end{array}\]
\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}{\log 10}
\begin{array}{l}
\mathbf{if}\;re \le -222.338080097683729:\\
\;\;\;\;\frac{1}{\frac{\log 10}{\log \left(-1 \cdot re\right)}}\\

\mathbf{elif}\;re \le 3.1105424028317862 \cdot 10^{46}:\\
\;\;\;\;\frac{1}{\frac{\log 10}{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}}\\

\mathbf{else}:\\
\;\;\;\;\frac{\log re}{\log 10}\\

\end{array}
double code(double re, double im) {
	return (log(sqrt(((re * re) + (im * im)))) / log(10.0));
}
double code(double re, double im) {
	double VAR;
	if ((re <= -222.33808009768373)) {
		VAR = (1.0 / (log(10.0) / log((-1.0 * re))));
	} else {
		double VAR_1;
		if ((re <= 3.110542402831786e+46)) {
			VAR_1 = (1.0 / (log(10.0) / log(sqrt(((re * re) + (im * im))))));
		} else {
			VAR_1 = (log(re) / log(10.0));
		}
		VAR = VAR_1;
	}
	return VAR;
}

Error

Bits error versus re

Bits error versus im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 3 regimes
  2. if re < -222.33808009768373

    1. Initial program 40.7

      \[\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}{\log 10}\]
    2. Using strategy rm
    3. Applied clear-num40.8

      \[\leadsto \color{blue}{\frac{1}{\frac{\log 10}{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}}}\]
    4. Taylor expanded around -inf 13.8

      \[\leadsto \frac{1}{\frac{\log 10}{\log \color{blue}{\left(-1 \cdot re\right)}}}\]

    if -222.33808009768373 < re < 3.110542402831786e+46

    1. Initial program 23.8

      \[\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}{\log 10}\]
    2. Using strategy rm
    3. Applied clear-num23.9

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

    if 3.110542402831786e+46 < re

    1. Initial program 44.0

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

      \[\leadsto \frac{\log \color{blue}{re}}{\log 10}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification19.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -222.338080097683729:\\ \;\;\;\;\frac{1}{\frac{\log 10}{\log \left(-1 \cdot re\right)}}\\ \mathbf{elif}\;re \le 3.1105424028317862 \cdot 10^{46}:\\ \;\;\;\;\frac{1}{\frac{\log 10}{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\log re}{\log 10}\\ \end{array}\]

Reproduce

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