| Alternative 1 | |
|---|---|
| Error | 23.4 |
| Cost | 14424 |
(FPCore (re im) :precision binary64 (* 0.5 (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))))
(FPCore (re im)
:precision binary64
(let* ((t_0 (* 0.5 (* 2.0 (sqrt re))))
(t_1 (* 0.5 (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))))
(t_2 (sqrt (- (/ 1.0 re))))
(t_3 (* im t_2))
(t_4 (* 0.5 t_3)))
(if (<= im -1.3e+48)
(* 0.5 (sqrt (* im -2.0)))
(if (<= im -1.7e-161)
t_1
(if (<= im -1.1e-268)
(* 0.5 (- t_3))
(if (<= im -6.4e-283)
t_0
(if (<= im -6e-303)
(*
0.5
(- (* im (* (/ 1.0 t_2) (sqrt (* (/ 1.0 re) (/ 1.0 re)))))))
(if (<= im 5.5e-293)
t_4
(if (<= im 7.6e-242)
t_0
(if (<= im 5.2e-172)
t_4
(if (<= im 4e+70)
t_1
(* 0.5 (* (sqrt 2.0) (sqrt im))))))))))))))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 t_0 = 0.5 * (2.0 * sqrt(re));
double t_1 = 0.5 * sqrt((2.0 * (sqrt(((re * re) + (im * im))) + re)));
double t_2 = sqrt(-(1.0 / re));
double t_3 = im * t_2;
double t_4 = 0.5 * t_3;
double tmp;
if (im <= -1.3e+48) {
tmp = 0.5 * sqrt((im * -2.0));
} else if (im <= -1.7e-161) {
tmp = t_1;
} else if (im <= -1.1e-268) {
tmp = 0.5 * -t_3;
} else if (im <= -6.4e-283) {
tmp = t_0;
} else if (im <= -6e-303) {
tmp = 0.5 * -(im * ((1.0 / t_2) * sqrt(((1.0 / re) * (1.0 / re)))));
} else if (im <= 5.5e-293) {
tmp = t_4;
} else if (im <= 7.6e-242) {
tmp = t_0;
} else if (im <= 5.2e-172) {
tmp = t_4;
} else if (im <= 4e+70) {
tmp = t_1;
} else {
tmp = 0.5 * (sqrt(2.0) * sqrt(im));
}
return tmp;
}
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
code = 0.5d0 * sqrt((2.0d0 * (sqrt(((re * re) + (im * im))) + re)))
end function
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: t_3
real(8) :: t_4
real(8) :: tmp
t_0 = 0.5d0 * (2.0d0 * sqrt(re))
t_1 = 0.5d0 * sqrt((2.0d0 * (sqrt(((re * re) + (im * im))) + re)))
t_2 = sqrt(-(1.0d0 / re))
t_3 = im * t_2
t_4 = 0.5d0 * t_3
if (im <= (-1.3d+48)) then
tmp = 0.5d0 * sqrt((im * (-2.0d0)))
else if (im <= (-1.7d-161)) then
tmp = t_1
else if (im <= (-1.1d-268)) then
tmp = 0.5d0 * -t_3
else if (im <= (-6.4d-283)) then
tmp = t_0
else if (im <= (-6d-303)) then
tmp = 0.5d0 * -(im * ((1.0d0 / t_2) * sqrt(((1.0d0 / re) * (1.0d0 / re)))))
else if (im <= 5.5d-293) then
tmp = t_4
else if (im <= 7.6d-242) then
tmp = t_0
else if (im <= 5.2d-172) then
tmp = t_4
else if (im <= 4d+70) then
tmp = t_1
else
tmp = 0.5d0 * (sqrt(2.0d0) * sqrt(im))
end if
code = tmp
end function
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 t_0 = 0.5 * (2.0 * Math.sqrt(re));
double t_1 = 0.5 * Math.sqrt((2.0 * (Math.sqrt(((re * re) + (im * im))) + re)));
double t_2 = Math.sqrt(-(1.0 / re));
double t_3 = im * t_2;
double t_4 = 0.5 * t_3;
double tmp;
if (im <= -1.3e+48) {
tmp = 0.5 * Math.sqrt((im * -2.0));
} else if (im <= -1.7e-161) {
tmp = t_1;
} else if (im <= -1.1e-268) {
tmp = 0.5 * -t_3;
} else if (im <= -6.4e-283) {
tmp = t_0;
} else if (im <= -6e-303) {
tmp = 0.5 * -(im * ((1.0 / t_2) * Math.sqrt(((1.0 / re) * (1.0 / re)))));
} else if (im <= 5.5e-293) {
tmp = t_4;
} else if (im <= 7.6e-242) {
tmp = t_0;
} else if (im <= 5.2e-172) {
tmp = t_4;
} else if (im <= 4e+70) {
tmp = t_1;
} else {
tmp = 0.5 * (Math.sqrt(2.0) * Math.sqrt(im));
}
return tmp;
}
def code(re, im): return 0.5 * math.sqrt((2.0 * (math.sqrt(((re * re) + (im * im))) + re)))
def code(re, im): t_0 = 0.5 * (2.0 * math.sqrt(re)) t_1 = 0.5 * math.sqrt((2.0 * (math.sqrt(((re * re) + (im * im))) + re))) t_2 = math.sqrt(-(1.0 / re)) t_3 = im * t_2 t_4 = 0.5 * t_3 tmp = 0 if im <= -1.3e+48: tmp = 0.5 * math.sqrt((im * -2.0)) elif im <= -1.7e-161: tmp = t_1 elif im <= -1.1e-268: tmp = 0.5 * -t_3 elif im <= -6.4e-283: tmp = t_0 elif im <= -6e-303: tmp = 0.5 * -(im * ((1.0 / t_2) * math.sqrt(((1.0 / re) * (1.0 / re))))) elif im <= 5.5e-293: tmp = t_4 elif im <= 7.6e-242: tmp = t_0 elif im <= 5.2e-172: tmp = t_4 elif im <= 4e+70: tmp = t_1 else: tmp = 0.5 * (math.sqrt(2.0) * math.sqrt(im)) 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) t_0 = Float64(0.5 * Float64(2.0 * sqrt(re))) t_1 = Float64(0.5 * sqrt(Float64(2.0 * Float64(sqrt(Float64(Float64(re * re) + Float64(im * im))) + re)))) t_2 = sqrt(Float64(-Float64(1.0 / re))) t_3 = Float64(im * t_2) t_4 = Float64(0.5 * t_3) tmp = 0.0 if (im <= -1.3e+48) tmp = Float64(0.5 * sqrt(Float64(im * -2.0))); elseif (im <= -1.7e-161) tmp = t_1; elseif (im <= -1.1e-268) tmp = Float64(0.5 * Float64(-t_3)); elseif (im <= -6.4e-283) tmp = t_0; elseif (im <= -6e-303) tmp = Float64(0.5 * Float64(-Float64(im * Float64(Float64(1.0 / t_2) * sqrt(Float64(Float64(1.0 / re) * Float64(1.0 / re))))))); elseif (im <= 5.5e-293) tmp = t_4; elseif (im <= 7.6e-242) tmp = t_0; elseif (im <= 5.2e-172) tmp = t_4; elseif (im <= 4e+70) tmp = t_1; else tmp = Float64(0.5 * Float64(sqrt(2.0) * sqrt(im))); 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) t_0 = 0.5 * (2.0 * sqrt(re)); t_1 = 0.5 * sqrt((2.0 * (sqrt(((re * re) + (im * im))) + re))); t_2 = sqrt(-(1.0 / re)); t_3 = im * t_2; t_4 = 0.5 * t_3; tmp = 0.0; if (im <= -1.3e+48) tmp = 0.5 * sqrt((im * -2.0)); elseif (im <= -1.7e-161) tmp = t_1; elseif (im <= -1.1e-268) tmp = 0.5 * -t_3; elseif (im <= -6.4e-283) tmp = t_0; elseif (im <= -6e-303) tmp = 0.5 * -(im * ((1.0 / t_2) * sqrt(((1.0 / re) * (1.0 / re))))); elseif (im <= 5.5e-293) tmp = t_4; elseif (im <= 7.6e-242) tmp = t_0; elseif (im <= 5.2e-172) tmp = t_4; elseif (im <= 4e+70) tmp = t_1; else tmp = 0.5 * (sqrt(2.0) * sqrt(im)); 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_] := Block[{t$95$0 = N[(0.5 * N[(2.0 * N[Sqrt[re], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = 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]}, Block[{t$95$2 = N[Sqrt[(-N[(1.0 / re), $MachinePrecision])], $MachinePrecision]}, Block[{t$95$3 = N[(im * t$95$2), $MachinePrecision]}, Block[{t$95$4 = N[(0.5 * t$95$3), $MachinePrecision]}, If[LessEqual[im, -1.3e+48], N[(0.5 * N[Sqrt[N[(im * -2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[im, -1.7e-161], t$95$1, If[LessEqual[im, -1.1e-268], N[(0.5 * (-t$95$3)), $MachinePrecision], If[LessEqual[im, -6.4e-283], t$95$0, If[LessEqual[im, -6e-303], N[(0.5 * (-N[(im * N[(N[(1.0 / t$95$2), $MachinePrecision] * N[Sqrt[N[(N[(1.0 / re), $MachinePrecision] * N[(1.0 / re), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision])), $MachinePrecision], If[LessEqual[im, 5.5e-293], t$95$4, If[LessEqual[im, 7.6e-242], t$95$0, If[LessEqual[im, 5.2e-172], t$95$4, If[LessEqual[im, 4e+70], t$95$1, N[(0.5 * N[(N[Sqrt[2.0], $MachinePrecision] * N[Sqrt[im], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]]]]]]]]
0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}
\begin{array}{l}
t_0 := 0.5 \cdot \left(2 \cdot \sqrt{re}\right)\\
t_1 := 0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\\
t_2 := \sqrt{-\frac{1}{re}}\\
t_3 := im \cdot t_2\\
t_4 := 0.5 \cdot t_3\\
\mathbf{if}\;im \leq -1.3 \cdot 10^{+48}:\\
\;\;\;\;0.5 \cdot \sqrt{im \cdot -2}\\
\mathbf{elif}\;im \leq -1.7 \cdot 10^{-161}:\\
\;\;\;\;t_1\\
\mathbf{elif}\;im \leq -1.1 \cdot 10^{-268}:\\
\;\;\;\;0.5 \cdot \left(-t_3\right)\\
\mathbf{elif}\;im \leq -6.4 \cdot 10^{-283}:\\
\;\;\;\;t_0\\
\mathbf{elif}\;im \leq -6 \cdot 10^{-303}:\\
\;\;\;\;0.5 \cdot \left(-im \cdot \left(\frac{1}{t_2} \cdot \sqrt{\frac{1}{re} \cdot \frac{1}{re}}\right)\right)\\
\mathbf{elif}\;im \leq 5.5 \cdot 10^{-293}:\\
\;\;\;\;t_4\\
\mathbf{elif}\;im \leq 7.6 \cdot 10^{-242}:\\
\;\;\;\;t_0\\
\mathbf{elif}\;im \leq 5.2 \cdot 10^{-172}:\\
\;\;\;\;t_4\\
\mathbf{elif}\;im \leq 4 \cdot 10^{+70}:\\
\;\;\;\;t_1\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \sqrt{im}\right)\\
\end{array}
Results
| Original | 39.1 |
|---|---|
| Target | 34.1 |
| Herbie | 23.3 |
if im < -1.29999999999999998e48Initial program 46.3
Taylor expanded in im around -inf 12.8
Simplified12.8
[Start]12.8 | \[ 0.5 \cdot \sqrt{2 \cdot \left(-1 \cdot im + re\right)}
\] |
|---|---|
rational_best.json-simplify-2 [=>]12.8 | \[ 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{im \cdot -1} + re\right)}
\] |
rational_best.json-simplify-12 [=>]12.8 | \[ 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{\left(-im\right)} + re\right)}
\] |
Taylor expanded in re around 0 64.0
Simplified13.4
[Start]64.0 | \[ 0.5 \cdot \left(\left(\sqrt{2} \cdot \sqrt{-1}\right) \cdot \sqrt{im}\right)
\] |
|---|---|
exponential.json-simplify-19 [=>]64.0 | \[ 0.5 \cdot \left(\color{blue}{\sqrt{-1 \cdot 2}} \cdot \sqrt{im}\right)
\] |
metadata-eval [=>]64.0 | \[ 0.5 \cdot \left(\sqrt{\color{blue}{-2}} \cdot \sqrt{im}\right)
\] |
exponential.json-simplify-19 [=>]13.4 | \[ 0.5 \cdot \color{blue}{\sqrt{im \cdot -2}}
\] |
if -1.29999999999999998e48 < im < -1.69999999999999991e-161 or 5.1999999999999996e-172 < im < 4.00000000000000029e70Initial program 26.7
if -1.69999999999999991e-161 < im < -1.10000000000000002e-268Initial program 44.9
Taylor expanded in re around -inf 55.2
Simplified55.2
[Start]55.2 | \[ 0.5 \cdot \sqrt{2 \cdot \left(-0.5 \cdot \frac{{im}^{2}}{re}\right)}
\] |
|---|---|
rational_best.json-simplify-2 [=>]55.2 | \[ 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(\frac{{im}^{2}}{re} \cdot -0.5\right)}}
\] |
Taylor expanded in im around -inf 64.0
Simplified36.4
[Start]64.0 | \[ 0.5 \cdot \left(-1 \cdot \left(\left(\sqrt{-1} \cdot im\right) \cdot \sqrt{\frac{1}{re}}\right)\right)
\] |
|---|---|
rational_best.json-simplify-2 [=>]64.0 | \[ 0.5 \cdot \color{blue}{\left(\left(\left(\sqrt{-1} \cdot im\right) \cdot \sqrt{\frac{1}{re}}\right) \cdot -1\right)}
\] |
rational_best.json-simplify-12 [=>]64.0 | \[ 0.5 \cdot \color{blue}{\left(-\left(\sqrt{-1} \cdot im\right) \cdot \sqrt{\frac{1}{re}}\right)}
\] |
rational_best.json-simplify-2 [=>]64.0 | \[ 0.5 \cdot \left(-\color{blue}{\sqrt{\frac{1}{re}} \cdot \left(\sqrt{-1} \cdot im\right)}\right)
\] |
rational_best.json-simplify-2 [=>]64.0 | \[ 0.5 \cdot \left(-\sqrt{\frac{1}{re}} \cdot \color{blue}{\left(im \cdot \sqrt{-1}\right)}\right)
\] |
rational_best.json-simplify-44 [=>]64.0 | \[ 0.5 \cdot \left(-\color{blue}{im \cdot \left(\sqrt{\frac{1}{re}} \cdot \sqrt{-1}\right)}\right)
\] |
exponential.json-simplify-19 [=>]36.4 | \[ 0.5 \cdot \left(-im \cdot \color{blue}{\sqrt{-1 \cdot \frac{1}{re}}}\right)
\] |
rational_best.json-simplify-2 [=>]36.4 | \[ 0.5 \cdot \left(-im \cdot \sqrt{\color{blue}{\frac{1}{re} \cdot -1}}\right)
\] |
rational_best.json-simplify-12 [=>]36.4 | \[ 0.5 \cdot \left(-im \cdot \sqrt{\color{blue}{-\frac{1}{re}}}\right)
\] |
if -1.10000000000000002e-268 < im < -6.40000000000000023e-283 or 5.50000000000000028e-293 < im < 7.6000000000000004e-242Initial program 43.2
Taylor expanded in im around 0 36.0
Simplified35.5
[Start]36.0 | \[ 0.5 \cdot \left({\left(\sqrt{2}\right)}^{2} \cdot \sqrt{re}\right)
\] |
|---|---|
exponential.json-simplify-24 [=>]35.5 | \[ 0.5 \cdot \left(\color{blue}{\sqrt{{2}^{2}}} \cdot \sqrt{re}\right)
\] |
metadata-eval [=>]35.5 | \[ 0.5 \cdot \left(\sqrt{\color{blue}{4}} \cdot \sqrt{re}\right)
\] |
metadata-eval [=>]35.5 | \[ 0.5 \cdot \left(\color{blue}{2} \cdot \sqrt{re}\right)
\] |
if -6.40000000000000023e-283 < im < -6.00000000000000055e-303Initial program 39.0
Taylor expanded in re around -inf 47.4
Simplified47.4
[Start]47.4 | \[ 0.5 \cdot \sqrt{2 \cdot \left(-0.5 \cdot \frac{{im}^{2}}{re}\right)}
\] |
|---|---|
rational_best.json-simplify-2 [=>]47.4 | \[ 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(\frac{{im}^{2}}{re} \cdot -0.5\right)}}
\] |
Taylor expanded in im around -inf 64.0
Simplified32.7
[Start]64.0 | \[ 0.5 \cdot \left(-1 \cdot \left(\left(\sqrt{-1} \cdot im\right) \cdot \sqrt{\frac{1}{re}}\right)\right)
\] |
|---|---|
rational_best.json-simplify-2 [=>]64.0 | \[ 0.5 \cdot \color{blue}{\left(\left(\left(\sqrt{-1} \cdot im\right) \cdot \sqrt{\frac{1}{re}}\right) \cdot -1\right)}
\] |
rational_best.json-simplify-12 [=>]64.0 | \[ 0.5 \cdot \color{blue}{\left(-\left(\sqrt{-1} \cdot im\right) \cdot \sqrt{\frac{1}{re}}\right)}
\] |
rational_best.json-simplify-2 [=>]64.0 | \[ 0.5 \cdot \left(-\color{blue}{\sqrt{\frac{1}{re}} \cdot \left(\sqrt{-1} \cdot im\right)}\right)
\] |
rational_best.json-simplify-2 [=>]64.0 | \[ 0.5 \cdot \left(-\sqrt{\frac{1}{re}} \cdot \color{blue}{\left(im \cdot \sqrt{-1}\right)}\right)
\] |
rational_best.json-simplify-44 [=>]64.0 | \[ 0.5 \cdot \left(-\color{blue}{im \cdot \left(\sqrt{\frac{1}{re}} \cdot \sqrt{-1}\right)}\right)
\] |
exponential.json-simplify-19 [=>]32.7 | \[ 0.5 \cdot \left(-im \cdot \color{blue}{\sqrt{-1 \cdot \frac{1}{re}}}\right)
\] |
rational_best.json-simplify-2 [=>]32.7 | \[ 0.5 \cdot \left(-im \cdot \sqrt{\color{blue}{\frac{1}{re} \cdot -1}}\right)
\] |
rational_best.json-simplify-12 [=>]32.7 | \[ 0.5 \cdot \left(-im \cdot \sqrt{\color{blue}{-\frac{1}{re}}}\right)
\] |
Applied egg-rr39.0
if -6.00000000000000055e-303 < im < 5.50000000000000028e-293 or 7.6000000000000004e-242 < im < 5.1999999999999996e-172Initial program 44.0
Taylor expanded in re around -inf 53.6
Simplified53.6
[Start]53.6 | \[ 0.5 \cdot \sqrt{2 \cdot \left(-0.5 \cdot \frac{{im}^{2}}{re}\right)}
\] |
|---|---|
rational_best.json-simplify-2 [=>]53.6 | \[ 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(\frac{{im}^{2}}{re} \cdot -0.5\right)}}
\] |
Taylor expanded in im around 0 64.0
Simplified37.5
[Start]64.0 | \[ 0.5 \cdot \left(\left(\sqrt{-1} \cdot im\right) \cdot \sqrt{\frac{1}{re}}\right)
\] |
|---|---|
rational_best.json-simplify-2 [=>]64.0 | \[ 0.5 \cdot \color{blue}{\left(\sqrt{\frac{1}{re}} \cdot \left(\sqrt{-1} \cdot im\right)\right)}
\] |
rational_best.json-simplify-2 [=>]64.0 | \[ 0.5 \cdot \left(\sqrt{\frac{1}{re}} \cdot \color{blue}{\left(im \cdot \sqrt{-1}\right)}\right)
\] |
rational_best.json-simplify-44 [=>]64.0 | \[ 0.5 \cdot \color{blue}{\left(im \cdot \left(\sqrt{\frac{1}{re}} \cdot \sqrt{-1}\right)\right)}
\] |
exponential.json-simplify-19 [=>]37.5 | \[ 0.5 \cdot \left(im \cdot \color{blue}{\sqrt{-1 \cdot \frac{1}{re}}}\right)
\] |
rational_best.json-simplify-2 [=>]37.5 | \[ 0.5 \cdot \left(im \cdot \sqrt{\color{blue}{\frac{1}{re} \cdot -1}}\right)
\] |
rational_best.json-simplify-12 [=>]37.5 | \[ 0.5 \cdot \left(im \cdot \sqrt{\color{blue}{-\frac{1}{re}}}\right)
\] |
if 4.00000000000000029e70 < im Initial program 48.6
Taylor expanded in re around 0 12.4
Final simplification23.3
| Alternative 1 | |
|---|---|
| Error | 23.4 |
| Cost | 14424 |
| Alternative 2 | |
|---|---|
| Error | 25.9 |
| Cost | 7640 |
| Alternative 3 | |
|---|---|
| Error | 26.0 |
| Cost | 7508 |
| Alternative 4 | |
|---|---|
| Error | 26.1 |
| Cost | 7112 |
| Alternative 5 | |
|---|---|
| Error | 25.8 |
| Cost | 7112 |
| Alternative 6 | |
|---|---|
| Error | 26.3 |
| Cost | 6984 |
| Alternative 7 | |
|---|---|
| Error | 30.4 |
| Cost | 6852 |
| Alternative 8 | |
|---|---|
| Error | 47.5 |
| Cost | 6720 |
herbie shell --seed 2023090
(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)))))