?

Average Accuracy: 38.7% → 80.0%
Time: 12.7s
Precision: binary64
Cost: 33101

?

\[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)} \]
\[\begin{array}{l} \mathbf{if}\;re \leq -1.02 \cdot 10^{+186}:\\ \;\;\;\;0.5 \cdot \sqrt{im \cdot \frac{-im}{re}}\\ \mathbf{elif}\;re \leq -0.05 \lor \neg \left(re \leq -1.6 \cdot 10^{-73}\right):\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot {\left({\left(e^{0.25}\right)}^{\left(2 \cdot \log im + \log \left(\frac{-1}{re}\right)\right)}\right)}^{2}\\ \end{array} \]
(FPCore (re im)
 :precision binary64
 (* 0.5 (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))))
(FPCore (re im)
 :precision binary64
 (if (<= re -1.02e+186)
   (* 0.5 (sqrt (* im (/ (- im) re))))
   (if (or (<= re -0.05) (not (<= re -1.6e-73)))
     (* 0.5 (sqrt (* 2.0 (+ re (hypot re im)))))
     (*
      0.5
      (pow (pow (exp 0.25) (+ (* 2.0 (log im)) (log (/ -1.0 re)))) 2.0)))))
double code(double re, double im) {
	return 0.5 * sqrt((2.0 * (sqrt(((re * re) + (im * im))) + re)));
}
double code(double re, double im) {
	double tmp;
	if (re <= -1.02e+186) {
		tmp = 0.5 * sqrt((im * (-im / re)));
	} else if ((re <= -0.05) || !(re <= -1.6e-73)) {
		tmp = 0.5 * sqrt((2.0 * (re + hypot(re, im))));
	} else {
		tmp = 0.5 * pow(pow(exp(0.25), ((2.0 * log(im)) + log((-1.0 / re)))), 2.0);
	}
	return tmp;
}
public static double code(double re, double im) {
	return 0.5 * Math.sqrt((2.0 * (Math.sqrt(((re * re) + (im * im))) + re)));
}
public static double code(double re, double im) {
	double tmp;
	if (re <= -1.02e+186) {
		tmp = 0.5 * Math.sqrt((im * (-im / re)));
	} else if ((re <= -0.05) || !(re <= -1.6e-73)) {
		tmp = 0.5 * Math.sqrt((2.0 * (re + Math.hypot(re, im))));
	} else {
		tmp = 0.5 * Math.pow(Math.pow(Math.exp(0.25), ((2.0 * Math.log(im)) + Math.log((-1.0 / re)))), 2.0);
	}
	return tmp;
}
def code(re, im):
	return 0.5 * math.sqrt((2.0 * (math.sqrt(((re * re) + (im * im))) + re)))
def code(re, im):
	tmp = 0
	if re <= -1.02e+186:
		tmp = 0.5 * math.sqrt((im * (-im / re)))
	elif (re <= -0.05) or not (re <= -1.6e-73):
		tmp = 0.5 * math.sqrt((2.0 * (re + math.hypot(re, im))))
	else:
		tmp = 0.5 * math.pow(math.pow(math.exp(0.25), ((2.0 * math.log(im)) + math.log((-1.0 / re)))), 2.0)
	return tmp
function code(re, im)
	return Float64(0.5 * sqrt(Float64(2.0 * Float64(sqrt(Float64(Float64(re * re) + Float64(im * im))) + re))))
end
function code(re, im)
	tmp = 0.0
	if (re <= -1.02e+186)
		tmp = Float64(0.5 * sqrt(Float64(im * Float64(Float64(-im) / re))));
	elseif ((re <= -0.05) || !(re <= -1.6e-73))
		tmp = Float64(0.5 * sqrt(Float64(2.0 * Float64(re + hypot(re, im)))));
	else
		tmp = Float64(0.5 * ((exp(0.25) ^ Float64(Float64(2.0 * log(im)) + log(Float64(-1.0 / re)))) ^ 2.0));
	end
	return tmp
end
function tmp = code(re, im)
	tmp = 0.5 * sqrt((2.0 * (sqrt(((re * re) + (im * im))) + re)));
end
function tmp_2 = code(re, im)
	tmp = 0.0;
	if (re <= -1.02e+186)
		tmp = 0.5 * sqrt((im * (-im / re)));
	elseif ((re <= -0.05) || ~((re <= -1.6e-73)))
		tmp = 0.5 * sqrt((2.0 * (re + hypot(re, im))));
	else
		tmp = 0.5 * ((exp(0.25) ^ ((2.0 * log(im)) + log((-1.0 / re)))) ^ 2.0);
	end
	tmp_2 = tmp;
end
code[re_, im_] := N[(0.5 * N[Sqrt[N[(2.0 * N[(N[Sqrt[N[(N[(re * re), $MachinePrecision] + N[(im * im), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] + re), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
code[re_, im_] := If[LessEqual[re, -1.02e+186], N[(0.5 * N[Sqrt[N[(im * N[((-im) / re), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[Or[LessEqual[re, -0.05], N[Not[LessEqual[re, -1.6e-73]], $MachinePrecision]], N[(0.5 * N[Sqrt[N[(2.0 * N[(re + N[Sqrt[re ^ 2 + im ^ 2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(0.5 * N[Power[N[Power[N[Exp[0.25], $MachinePrecision], N[(N[(2.0 * N[Log[im], $MachinePrecision]), $MachinePrecision] + N[Log[N[(-1.0 / re), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]]]
0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}
\begin{array}{l}
\mathbf{if}\;re \leq -1.02 \cdot 10^{+186}:\\
\;\;\;\;0.5 \cdot \sqrt{im \cdot \frac{-im}{re}}\\

\mathbf{elif}\;re \leq -0.05 \lor \neg \left(re \leq -1.6 \cdot 10^{-73}\right):\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\\

\mathbf{else}:\\
\;\;\;\;0.5 \cdot {\left({\left(e^{0.25}\right)}^{\left(2 \cdot \log im + \log \left(\frac{-1}{re}\right)\right)}\right)}^{2}\\


\end{array}

Error?

Try it out?

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original38.7%
Target47.0%
Herbie80.0%
\[\begin{array}{l} \mathbf{if}\;re < 0:\\ \;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \sqrt{\frac{im \cdot im}{\sqrt{re \cdot re + im \cdot im} - re}}\right)\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\\ \end{array} \]

Derivation?

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

    1. Initial program 0.0%

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)} \]
    2. Simplified35.3%

      \[\leadsto \color{blue}{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \]
      Proof

      [Start]0.0

      \[ 0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)} \]

      +-commutative [=>]0.0

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

      hypot-def [=>]35.3

      \[ 0.5 \cdot \sqrt{2 \cdot \left(re + \color{blue}{\mathsf{hypot}\left(re, im\right)}\right)} \]
    3. Taylor expanded in re around -inf 50.9%

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(-0.5 \cdot \frac{{im}^{2}}{re}\right)}} \]
    4. Simplified65.7%

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(\frac{im}{\frac{re}{im}} \cdot -0.5\right)}} \]
      Proof

      [Start]50.9

      \[ 0.5 \cdot \sqrt{2 \cdot \left(-0.5 \cdot \frac{{im}^{2}}{re}\right)} \]

      *-commutative [=>]50.9

      \[ 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(\frac{{im}^{2}}{re} \cdot -0.5\right)}} \]

      unpow2 [=>]50.9

      \[ 0.5 \cdot \sqrt{2 \cdot \left(\frac{\color{blue}{im \cdot im}}{re} \cdot -0.5\right)} \]

      associate-/l* [=>]65.7

      \[ 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{\frac{im}{\frac{re}{im}}} \cdot -0.5\right)} \]
    5. Taylor expanded in im around 0 50.9%

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{-1 \cdot \frac{{im}^{2}}{re}}} \]
    6. Simplified65.8%

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{im \cdot \frac{-im}{re}}} \]
      Proof

      [Start]50.9

      \[ 0.5 \cdot \sqrt{-1 \cdot \frac{{im}^{2}}{re}} \]

      mul-1-neg [=>]50.9

      \[ 0.5 \cdot \sqrt{\color{blue}{-\frac{{im}^{2}}{re}}} \]

      unpow2 [=>]50.9

      \[ 0.5 \cdot \sqrt{-\frac{\color{blue}{im \cdot im}}{re}} \]

      associate-*r/ [<=]65.8

      \[ 0.5 \cdot \sqrt{-\color{blue}{im \cdot \frac{im}{re}}} \]

      distribute-rgt-neg-in [=>]65.8

      \[ 0.5 \cdot \sqrt{\color{blue}{im \cdot \left(-\frac{im}{re}\right)}} \]

      distribute-frac-neg [<=]65.8

      \[ 0.5 \cdot \sqrt{im \cdot \color{blue}{\frac{-im}{re}}} \]

    if -1.01999999999999999e186 < re < -0.050000000000000003 or -1.59999999999999993e-73 < re

    1. Initial program 43.7%

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)} \]
    2. Simplified85.9%

      \[\leadsto \color{blue}{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \]
      Proof

      [Start]43.7

      \[ 0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)} \]

      +-commutative [=>]43.7

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

      hypot-def [=>]85.9

      \[ 0.5 \cdot \sqrt{2 \cdot \left(re + \color{blue}{\mathsf{hypot}\left(re, im\right)}\right)} \]

    if -0.050000000000000003 < re < -1.59999999999999993e-73

    1. Initial program 34.3%

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)} \]
    2. Simplified58.5%

      \[\leadsto \color{blue}{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \]
      Proof

      [Start]34.3

      \[ 0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)} \]

      +-commutative [=>]34.3

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

      hypot-def [=>]58.5

      \[ 0.5 \cdot \sqrt{2 \cdot \left(re + \color{blue}{\mathsf{hypot}\left(re, im\right)}\right)} \]
    3. Applied egg-rr58.1%

      \[\leadsto 0.5 \cdot \color{blue}{{\left({\left(\left(re + \mathsf{hypot}\left(re, im\right)\right) \cdot 2\right)}^{0.25}\right)}^{2}} \]
      Proof

      [Start]58.5

      \[ 0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \]

      add-sqr-sqrt [=>]58.1

      \[ 0.5 \cdot \color{blue}{\left(\sqrt{\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \cdot \sqrt{\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}}\right)} \]

      pow2 [=>]58.1

      \[ 0.5 \cdot \color{blue}{{\left(\sqrt{\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}}\right)}^{2}} \]

      pow1/2 [=>]58.1

      \[ 0.5 \cdot {\left(\sqrt{\color{blue}{{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)}^{0.5}}}\right)}^{2} \]

      sqrt-pow1 [=>]58.1

      \[ 0.5 \cdot {\color{blue}{\left({\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)}^{\left(\frac{0.5}{2}\right)}\right)}}^{2} \]

      *-commutative [=>]58.1

      \[ 0.5 \cdot {\left({\color{blue}{\left(\left(re + \mathsf{hypot}\left(re, im\right)\right) \cdot 2\right)}}^{\left(\frac{0.5}{2}\right)}\right)}^{2} \]

      metadata-eval [=>]58.1

      \[ 0.5 \cdot {\left({\left(\left(re + \mathsf{hypot}\left(re, im\right)\right) \cdot 2\right)}^{\color{blue}{0.25}}\right)}^{2} \]
    4. Taylor expanded in re around -inf 23.5%

      \[\leadsto 0.5 \cdot \color{blue}{{\left(e^{0.25 \cdot \left(\log \left({im}^{2}\right) + \log \left(\frac{-1}{re}\right)\right)}\right)}^{2}} \]
    5. Simplified18.1%

      \[\leadsto 0.5 \cdot \color{blue}{{\left({\left(e^{0.25}\right)}^{\left(2 \cdot \log im + \log \left(\frac{-1}{re}\right)\right)}\right)}^{2}} \]
      Proof

      [Start]23.5

      \[ 0.5 \cdot {\left(e^{0.25 \cdot \left(\log \left({im}^{2}\right) + \log \left(\frac{-1}{re}\right)\right)}\right)}^{2} \]

      exp-prod [=>]22.6

      \[ 0.5 \cdot {\color{blue}{\left({\left(e^{0.25}\right)}^{\left(\log \left({im}^{2}\right) + \log \left(\frac{-1}{re}\right)\right)}\right)}}^{2} \]

      log-pow [=>]18.1

      \[ 0.5 \cdot {\left({\left(e^{0.25}\right)}^{\left(\color{blue}{2 \cdot \log im} + \log \left(\frac{-1}{re}\right)\right)}\right)}^{2} \]
  3. Recombined 3 regimes into one program.
  4. Final simplification80.0%

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \leq -1.02 \cdot 10^{+186}:\\ \;\;\;\;0.5 \cdot \sqrt{im \cdot \frac{-im}{re}}\\ \mathbf{elif}\;re \leq -0.05 \lor \neg \left(re \leq -1.6 \cdot 10^{-73}\right):\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot {\left({\left(e^{0.25}\right)}^{\left(2 \cdot \log im + \log \left(\frac{-1}{re}\right)\right)}\right)}^{2}\\ \end{array} \]

Alternatives

Alternative 1
Accuracy84.9%
Cost27401
\[\begin{array}{l} t_0 := re + \sqrt{re \cdot re + im \cdot im}\\ \mathbf{if}\;t_0 \leq -1 \cdot 10^{-296} \lor \neg \left(t_0 \leq 0\right):\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{im \cdot \frac{-im}{re}}\\ \end{array} \]
Alternative 2
Accuracy56.7%
Cost7640
\[\begin{array}{l} t_0 := 0.5 \cdot \left(2 \cdot \sqrt{re}\right)\\ \mathbf{if}\;im \leq -3.7 \cdot 10^{-28}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re - im\right)}\\ \mathbf{elif}\;im \leq 3.9 \cdot 10^{-227}:\\ \;\;\;\;t_0\\ \mathbf{elif}\;im \leq 6 \cdot 10^{-158}:\\ \;\;\;\;0.5 \cdot \sqrt{im \cdot \frac{-im}{re}}\\ \mathbf{elif}\;im \leq 4.1 \cdot 10^{-137}:\\ \;\;\;\;t_0\\ \mathbf{elif}\;im \leq 1.32 \cdot 10^{-95}:\\ \;\;\;\;0.5 \cdot \sqrt{im \cdot 2}\\ \mathbf{elif}\;im \leq 6 \cdot 10^{-17}:\\ \;\;\;\;t_0\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + im\right)}\\ \end{array} \]
Alternative 3
Accuracy56.6%
Cost7377
\[\begin{array}{l} \mathbf{if}\;im \leq -3 \cdot 10^{-28}:\\ \;\;\;\;0.5 \cdot \sqrt{im \cdot -2}\\ \mathbf{elif}\;im \leq 9 \cdot 10^{-236} \lor \neg \left(im \leq 2.6 \cdot 10^{-96}\right) \land im \leq 6 \cdot 10^{-17}:\\ \;\;\;\;0.5 \cdot \left(2 \cdot \sqrt{re}\right)\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + im\right)}\\ \end{array} \]
Alternative 4
Accuracy56.9%
Cost7377
\[\begin{array}{l} \mathbf{if}\;im \leq -2.8 \cdot 10^{-28}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re - im\right)}\\ \mathbf{elif}\;im \leq 1.3 \cdot 10^{-235} \lor \neg \left(im \leq 1.05 \cdot 10^{-95}\right) \land im \leq 6 \cdot 10^{-17}:\\ \;\;\;\;0.5 \cdot \left(2 \cdot \sqrt{re}\right)\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + im\right)}\\ \end{array} \]
Alternative 5
Accuracy56.7%
Cost7249
\[\begin{array}{l} \mathbf{if}\;im \leq -3.7 \cdot 10^{-28}:\\ \;\;\;\;0.5 \cdot \sqrt{im \cdot -2}\\ \mathbf{elif}\;im \leq 4.1 \cdot 10^{-140} \lor \neg \left(im \leq 6.2 \cdot 10^{-96}\right) \land im \leq 920000:\\ \;\;\;\;0.5 \cdot \left(2 \cdot \sqrt{re}\right)\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{im \cdot 2}\\ \end{array} \]
Alternative 6
Accuracy51.9%
Cost6852
\[\begin{array}{l} \mathbf{if}\;im \leq -2 \cdot 10^{-310}:\\ \;\;\;\;0.5 \cdot \sqrt{im \cdot -2}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{im \cdot 2}\\ \end{array} \]
Alternative 7
Accuracy25.7%
Cost6720
\[0.5 \cdot \sqrt{im \cdot -2} \]

Error

Reproduce?

herbie shell --seed 2023135 
(FPCore (re im)
  :name "math.sqrt on complex, real part"
  :precision binary64

  :herbie-target
  (if (< re 0.0) (* 0.5 (* (sqrt 2.0) (sqrt (/ (* im im) (- (sqrt (+ (* re re) (* im im))) re))))) (* 0.5 (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))))

  (* 0.5 (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))))