Average Error: 32.1 → 17.7
Time: 7.4s
Precision: binary64
\[\]
\[\]
double code(double re, double im, double base) {
	return ((double) (((double) (((double) (((double) log(((double) sqrt(((double) (((double) (re * re)) + ((double) (im * im)))))))) * ((double) log(base)))) + ((double) (((double) atan2(im, re)) * 0.0)))) / ((double) (((double) (((double) log(base)) * ((double) log(base)))) + ((double) (0.0 * 0.0))))));
}
double code(double re, double im, double base) {
	double VAR;
	if ((re <= -1.4091069253333409e+150)) {
		VAR = ((double) (1.0 / ((double) (((double) log(base)) / ((double) (((double) log(1.0)) - ((double) log(((double) (-1.0 / re))))))))));
	} else {
		double VAR_1;
		if ((re <= 1.1665438965232749e+122)) {
			VAR_1 = ((double) (1.0 / ((double) (((double) (((double) pow(((double) log(base)), 2.0)) + ((double) (0.0 * 0.0)))) / ((double) (((double) (((double) log(base)) * ((double) log(((double) sqrt(((double) (((double) (re * re)) + ((double) (im * im)))))))))) + ((double) (0.0 * ((double) atan2(im, re))))))))));
		} else {
			VAR_1 = ((double) (((double) (((double) (0.0 * ((double) atan2(im, re)))) + ((double) (((double) log(base)) * ((double) log(re)))))) / ((double) (((double) (0.0 * 0.0)) + ((double) (((double) log(base)) * ((double) log(base))))))));
		}
		VAR = VAR_1;
	}
	return VAR;
}

Error

Bits error versus re

Bits error versus im

Bits error versus base

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

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

    1. Initial program 62.7

      \[\]
    2. Using strategy rm
    3. Applied clear-num62.7

      \[\leadsto \]
    4. Simplified62.7

      \[\leadsto \]
    5. Taylor expanded around -inf 64.0

      \[\leadsto \]
    6. Simplified7.9

      \[\leadsto \]

    if -1.4091069253333409e150 < re < 1.1665438965232749e122

    1. Initial program 21.5

      \[\]
    2. Using strategy rm
    3. Applied clear-num21.5

      \[\leadsto \]
    4. Simplified21.5

      \[\leadsto \]

    if 1.1665438965232749e122 < re

    1. Initial program 57.2

      \[\]
    2. Taylor expanded around inf 7.4

      \[\leadsto \]
  3. Recombined 3 regimes into one program.
  4. Final simplification17.7

    \[\leadsto \]

Reproduce

herbie shell --seed 2020181 
(FPCore (re im base)
  :name "math.log/2 on complex, real part"
  :precision binary64
  (/ (+ (* (log (sqrt (+ (* re re) (* im im)))) (log base)) (* (atan2 im re) 0.0)) (+ (* (log base) (log base)) (* 0.0 0.0))))