
(FPCore (re im) :precision binary64 (* 0.5 (sqrt (* 2.0 (- (sqrt (+ (* re re) (* im im))) re)))))
double code(double re, double im) {
return 0.5 * sqrt((2.0 * (sqrt(((re * re) + (im * im))) - re)));
}
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
public static double code(double re, double im) {
return 0.5 * Math.sqrt((2.0 * (Math.sqrt(((re * re) + (im * im))) - re)));
}
def code(re, im): return 0.5 * math.sqrt((2.0 * (math.sqrt(((re * re) + (im * im))) - re)))
function code(re, im) return Float64(0.5 * sqrt(Float64(2.0 * Float64(sqrt(Float64(Float64(re * re) + Float64(im * im))) - re)))) end
function tmp = code(re, im) tmp = 0.5 * sqrt((2.0 * (sqrt(((re * re) + (im * im))) - re))); 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]
\begin{array}{l}
\\
0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 7 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (re im) :precision binary64 (* 0.5 (sqrt (* 2.0 (- (sqrt (+ (* re re) (* im im))) re)))))
double code(double re, double im) {
return 0.5 * sqrt((2.0 * (sqrt(((re * re) + (im * im))) - re)));
}
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
public static double code(double re, double im) {
return 0.5 * Math.sqrt((2.0 * (Math.sqrt(((re * re) + (im * im))) - re)));
}
def code(re, im): return 0.5 * math.sqrt((2.0 * (math.sqrt(((re * re) + (im * im))) - re)))
function code(re, im) return Float64(0.5 * sqrt(Float64(2.0 * Float64(sqrt(Float64(Float64(re * re) + Float64(im * im))) - re)))) end
function tmp = code(re, im) tmp = 0.5 * sqrt((2.0 * (sqrt(((re * re) + (im * im))) - re))); 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]
\begin{array}{l}
\\
0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}
\end{array}
(FPCore (re im) :precision binary64 (if (<= (- (sqrt (+ (* re re) (* im im))) re) 0.0) (* 0.5 (* im (pow re -0.5))) (* 0.5 (sqrt (* 2.0 (- (hypot re im) re))))))
double code(double re, double im) {
double tmp;
if ((sqrt(((re * re) + (im * im))) - re) <= 0.0) {
tmp = 0.5 * (im * pow(re, -0.5));
} else {
tmp = 0.5 * sqrt((2.0 * (hypot(re, im) - re)));
}
return tmp;
}
public static double code(double re, double im) {
double tmp;
if ((Math.sqrt(((re * re) + (im * im))) - re) <= 0.0) {
tmp = 0.5 * (im * Math.pow(re, -0.5));
} else {
tmp = 0.5 * Math.sqrt((2.0 * (Math.hypot(re, im) - re)));
}
return tmp;
}
def code(re, im): tmp = 0 if (math.sqrt(((re * re) + (im * im))) - re) <= 0.0: tmp = 0.5 * (im * math.pow(re, -0.5)) else: tmp = 0.5 * math.sqrt((2.0 * (math.hypot(re, im) - re))) return tmp
function code(re, im) tmp = 0.0 if (Float64(sqrt(Float64(Float64(re * re) + Float64(im * im))) - re) <= 0.0) tmp = Float64(0.5 * Float64(im * (re ^ -0.5))); else tmp = Float64(0.5 * sqrt(Float64(2.0 * Float64(hypot(re, im) - re)))); end return tmp end
function tmp_2 = code(re, im) tmp = 0.0; if ((sqrt(((re * re) + (im * im))) - re) <= 0.0) tmp = 0.5 * (im * (re ^ -0.5)); else tmp = 0.5 * sqrt((2.0 * (hypot(re, im) - re))); end tmp_2 = tmp; end
code[re_, im_] := If[LessEqual[N[(N[Sqrt[N[(N[(re * re), $MachinePrecision] + N[(im * im), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] - re), $MachinePrecision], 0.0], N[(0.5 * N[(im * N[Power[re, -0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(0.5 * N[Sqrt[N[(2.0 * N[(N[Sqrt[re ^ 2 + im ^ 2], $MachinePrecision] - re), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\sqrt{re \cdot re + im \cdot im} - re \leq 0:\\
\;\;\;\;0.5 \cdot \left(im \cdot {re}^{-0.5}\right)\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\mathsf{hypot}\left(re, im\right) - re\right)}\\
\end{array}
\end{array}
if (-.f64 (sqrt.f64 (+.f64 (*.f64 re re) (*.f64 im im))) re) < 0.0Initial program 6.2%
Taylor expanded in re around inf 29.9%
pow1/229.9%
div-inv30.0%
unpow-prod-down32.8%
pow1/232.8%
inv-pow32.8%
pow-pow32.8%
metadata-eval32.8%
Applied egg-rr32.8%
*-commutative32.8%
unpow232.8%
rem-sqrt-square97.2%
Simplified97.2%
Taylor expanded in re around 0 97.2%
rem-square-sqrt96.6%
fabs-sqr96.6%
rem-square-sqrt97.2%
unpow1/297.2%
rem-exp-log91.2%
exp-neg91.2%
exp-prod91.2%
distribute-lft-neg-out91.2%
distribute-rgt-neg-in91.2%
metadata-eval91.2%
exp-to-pow97.2%
Simplified97.2%
if 0.0 < (-.f64 (sqrt.f64 (+.f64 (*.f64 re re) (*.f64 im im))) re) Initial program 48.5%
sub-neg48.5%
sqr-neg48.5%
sub-neg48.5%
sqr-neg48.5%
hypot-define90.6%
Simplified90.6%
Final simplification91.5%
(FPCore (re im)
:precision binary64
(let* ((t_0 (* 0.5 (/ im (sqrt re))))
(t_1 (* 0.5 (sqrt (* re -4.0))))
(t_2 (* 0.5 (sqrt (* im 2.0))))
(t_3 (* 0.5 (sqrt (* 2.0 (- im re))))))
(if (<= re -2.1e+77)
t_1
(if (<= re -6.5)
t_3
(if (<= re -4.5e-61)
t_1
(if (<= re -4.2e-93)
t_2
(if (<= re -5.5e-99)
t_1
(if (<= re -1.28e-135)
t_3
(if (<= re -1.32e-136)
t_1
(if (<= re 9.5e-54)
(* 0.5 (sqrt (+ (* im 2.0) (* re (- (/ re im) 2.0)))))
(if (<= re 1.6e+25)
t_0
(if (<= re 1.95e+58)
t_2
(if (<= re 5.5e+72)
t_0
(if (<= re 2.3e+125)
t_2
(* 0.5 (* im (pow re -0.5)))))))))))))))))
double code(double re, double im) {
double t_0 = 0.5 * (im / sqrt(re));
double t_1 = 0.5 * sqrt((re * -4.0));
double t_2 = 0.5 * sqrt((im * 2.0));
double t_3 = 0.5 * sqrt((2.0 * (im - re)));
double tmp;
if (re <= -2.1e+77) {
tmp = t_1;
} else if (re <= -6.5) {
tmp = t_3;
} else if (re <= -4.5e-61) {
tmp = t_1;
} else if (re <= -4.2e-93) {
tmp = t_2;
} else if (re <= -5.5e-99) {
tmp = t_1;
} else if (re <= -1.28e-135) {
tmp = t_3;
} else if (re <= -1.32e-136) {
tmp = t_1;
} else if (re <= 9.5e-54) {
tmp = 0.5 * sqrt(((im * 2.0) + (re * ((re / im) - 2.0))));
} else if (re <= 1.6e+25) {
tmp = t_0;
} else if (re <= 1.95e+58) {
tmp = t_2;
} else if (re <= 5.5e+72) {
tmp = t_0;
} else if (re <= 2.3e+125) {
tmp = t_2;
} else {
tmp = 0.5 * (im * pow(re, -0.5));
}
return tmp;
}
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) :: tmp
t_0 = 0.5d0 * (im / sqrt(re))
t_1 = 0.5d0 * sqrt((re * (-4.0d0)))
t_2 = 0.5d0 * sqrt((im * 2.0d0))
t_3 = 0.5d0 * sqrt((2.0d0 * (im - re)))
if (re <= (-2.1d+77)) then
tmp = t_1
else if (re <= (-6.5d0)) then
tmp = t_3
else if (re <= (-4.5d-61)) then
tmp = t_1
else if (re <= (-4.2d-93)) then
tmp = t_2
else if (re <= (-5.5d-99)) then
tmp = t_1
else if (re <= (-1.28d-135)) then
tmp = t_3
else if (re <= (-1.32d-136)) then
tmp = t_1
else if (re <= 9.5d-54) then
tmp = 0.5d0 * sqrt(((im * 2.0d0) + (re * ((re / im) - 2.0d0))))
else if (re <= 1.6d+25) then
tmp = t_0
else if (re <= 1.95d+58) then
tmp = t_2
else if (re <= 5.5d+72) then
tmp = t_0
else if (re <= 2.3d+125) then
tmp = t_2
else
tmp = 0.5d0 * (im * (re ** (-0.5d0)))
end if
code = tmp
end function
public static double code(double re, double im) {
double t_0 = 0.5 * (im / Math.sqrt(re));
double t_1 = 0.5 * Math.sqrt((re * -4.0));
double t_2 = 0.5 * Math.sqrt((im * 2.0));
double t_3 = 0.5 * Math.sqrt((2.0 * (im - re)));
double tmp;
if (re <= -2.1e+77) {
tmp = t_1;
} else if (re <= -6.5) {
tmp = t_3;
} else if (re <= -4.5e-61) {
tmp = t_1;
} else if (re <= -4.2e-93) {
tmp = t_2;
} else if (re <= -5.5e-99) {
tmp = t_1;
} else if (re <= -1.28e-135) {
tmp = t_3;
} else if (re <= -1.32e-136) {
tmp = t_1;
} else if (re <= 9.5e-54) {
tmp = 0.5 * Math.sqrt(((im * 2.0) + (re * ((re / im) - 2.0))));
} else if (re <= 1.6e+25) {
tmp = t_0;
} else if (re <= 1.95e+58) {
tmp = t_2;
} else if (re <= 5.5e+72) {
tmp = t_0;
} else if (re <= 2.3e+125) {
tmp = t_2;
} else {
tmp = 0.5 * (im * Math.pow(re, -0.5));
}
return tmp;
}
def code(re, im): t_0 = 0.5 * (im / math.sqrt(re)) t_1 = 0.5 * math.sqrt((re * -4.0)) t_2 = 0.5 * math.sqrt((im * 2.0)) t_3 = 0.5 * math.sqrt((2.0 * (im - re))) tmp = 0 if re <= -2.1e+77: tmp = t_1 elif re <= -6.5: tmp = t_3 elif re <= -4.5e-61: tmp = t_1 elif re <= -4.2e-93: tmp = t_2 elif re <= -5.5e-99: tmp = t_1 elif re <= -1.28e-135: tmp = t_3 elif re <= -1.32e-136: tmp = t_1 elif re <= 9.5e-54: tmp = 0.5 * math.sqrt(((im * 2.0) + (re * ((re / im) - 2.0)))) elif re <= 1.6e+25: tmp = t_0 elif re <= 1.95e+58: tmp = t_2 elif re <= 5.5e+72: tmp = t_0 elif re <= 2.3e+125: tmp = t_2 else: tmp = 0.5 * (im * math.pow(re, -0.5)) return tmp
function code(re, im) t_0 = Float64(0.5 * Float64(im / sqrt(re))) t_1 = Float64(0.5 * sqrt(Float64(re * -4.0))) t_2 = Float64(0.5 * sqrt(Float64(im * 2.0))) t_3 = Float64(0.5 * sqrt(Float64(2.0 * Float64(im - re)))) tmp = 0.0 if (re <= -2.1e+77) tmp = t_1; elseif (re <= -6.5) tmp = t_3; elseif (re <= -4.5e-61) tmp = t_1; elseif (re <= -4.2e-93) tmp = t_2; elseif (re <= -5.5e-99) tmp = t_1; elseif (re <= -1.28e-135) tmp = t_3; elseif (re <= -1.32e-136) tmp = t_1; elseif (re <= 9.5e-54) tmp = Float64(0.5 * sqrt(Float64(Float64(im * 2.0) + Float64(re * Float64(Float64(re / im) - 2.0))))); elseif (re <= 1.6e+25) tmp = t_0; elseif (re <= 1.95e+58) tmp = t_2; elseif (re <= 5.5e+72) tmp = t_0; elseif (re <= 2.3e+125) tmp = t_2; else tmp = Float64(0.5 * Float64(im * (re ^ -0.5))); end return tmp end
function tmp_2 = code(re, im) t_0 = 0.5 * (im / sqrt(re)); t_1 = 0.5 * sqrt((re * -4.0)); t_2 = 0.5 * sqrt((im * 2.0)); t_3 = 0.5 * sqrt((2.0 * (im - re))); tmp = 0.0; if (re <= -2.1e+77) tmp = t_1; elseif (re <= -6.5) tmp = t_3; elseif (re <= -4.5e-61) tmp = t_1; elseif (re <= -4.2e-93) tmp = t_2; elseif (re <= -5.5e-99) tmp = t_1; elseif (re <= -1.28e-135) tmp = t_3; elseif (re <= -1.32e-136) tmp = t_1; elseif (re <= 9.5e-54) tmp = 0.5 * sqrt(((im * 2.0) + (re * ((re / im) - 2.0)))); elseif (re <= 1.6e+25) tmp = t_0; elseif (re <= 1.95e+58) tmp = t_2; elseif (re <= 5.5e+72) tmp = t_0; elseif (re <= 2.3e+125) tmp = t_2; else tmp = 0.5 * (im * (re ^ -0.5)); end tmp_2 = tmp; end
code[re_, im_] := Block[{t$95$0 = N[(0.5 * N[(im / N[Sqrt[re], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(0.5 * N[Sqrt[N[(re * -4.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(0.5 * N[Sqrt[N[(im * 2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[(0.5 * N[Sqrt[N[(2.0 * N[(im - re), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[re, -2.1e+77], t$95$1, If[LessEqual[re, -6.5], t$95$3, If[LessEqual[re, -4.5e-61], t$95$1, If[LessEqual[re, -4.2e-93], t$95$2, If[LessEqual[re, -5.5e-99], t$95$1, If[LessEqual[re, -1.28e-135], t$95$3, If[LessEqual[re, -1.32e-136], t$95$1, If[LessEqual[re, 9.5e-54], N[(0.5 * N[Sqrt[N[(N[(im * 2.0), $MachinePrecision] + N[(re * N[(N[(re / im), $MachinePrecision] - 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[re, 1.6e+25], t$95$0, If[LessEqual[re, 1.95e+58], t$95$2, If[LessEqual[re, 5.5e+72], t$95$0, If[LessEqual[re, 2.3e+125], t$95$2, N[(0.5 * N[(im * N[Power[re, -0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0.5 \cdot \frac{im}{\sqrt{re}}\\
t_1 := 0.5 \cdot \sqrt{re \cdot -4}\\
t_2 := 0.5 \cdot \sqrt{im \cdot 2}\\
t_3 := 0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\mathbf{if}\;re \leq -2.1 \cdot 10^{+77}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;re \leq -6.5:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;re \leq -4.5 \cdot 10^{-61}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;re \leq -4.2 \cdot 10^{-93}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;re \leq -5.5 \cdot 10^{-99}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;re \leq -1.28 \cdot 10^{-135}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;re \leq -1.32 \cdot 10^{-136}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;re \leq 9.5 \cdot 10^{-54}:\\
\;\;\;\;0.5 \cdot \sqrt{im \cdot 2 + re \cdot \left(\frac{re}{im} - 2\right)}\\
\mathbf{elif}\;re \leq 1.6 \cdot 10^{+25}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;re \leq 1.95 \cdot 10^{+58}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;re \leq 5.5 \cdot 10^{+72}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;re \leq 2.3 \cdot 10^{+125}:\\
\;\;\;\;t\_2\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(im \cdot {re}^{-0.5}\right)\\
\end{array}
\end{array}
if re < -2.0999999999999999e77 or -6.5 < re < -4.5e-61 or -4.2000000000000002e-93 < re < -5.49999999999999991e-99 or -1.27999999999999997e-135 < re < -1.3200000000000001e-136Initial program 42.5%
Taylor expanded in re around -inf 83.1%
*-commutative83.1%
Simplified83.1%
if -2.0999999999999999e77 < re < -6.5 or -5.49999999999999991e-99 < re < -1.27999999999999997e-135Initial program 61.7%
Taylor expanded in re around 0 74.5%
if -4.5e-61 < re < -4.2000000000000002e-93 or 1.6e25 < re < 1.95000000000000005e58 or 5.5e72 < re < 2.30000000000000013e125Initial program 53.4%
Taylor expanded in re around 0 86.3%
*-commutative86.3%
Simplified86.3%
if -1.3200000000000001e-136 < re < 9.4999999999999994e-54Initial program 55.0%
Taylor expanded in re around 0 82.4%
if 9.4999999999999994e-54 < re < 1.6e25 or 1.95000000000000005e58 < re < 5.5e72Initial program 31.1%
Taylor expanded in re around inf 27.4%
pow1/227.4%
div-inv27.4%
unpow-prod-down31.9%
pow1/231.9%
inv-pow31.9%
pow-pow31.9%
metadata-eval31.9%
Applied egg-rr31.9%
*-commutative31.9%
unpow231.9%
rem-sqrt-square73.3%
Simplified73.3%
*-commutative73.3%
metadata-eval73.3%
pow-flip73.3%
pow1/273.3%
div-inv73.4%
add-sqr-sqrt72.9%
fabs-sqr72.9%
add-sqr-sqrt73.4%
Applied egg-rr73.4%
if 2.30000000000000013e125 < re Initial program 3.0%
Taylor expanded in re around inf 54.9%
pow1/254.9%
div-inv54.9%
unpow-prod-down68.8%
pow1/268.8%
inv-pow68.8%
pow-pow68.8%
metadata-eval68.8%
Applied egg-rr68.8%
*-commutative68.8%
unpow268.8%
rem-sqrt-square87.4%
Simplified87.4%
Taylor expanded in re around 0 87.4%
rem-square-sqrt87.0%
fabs-sqr87.0%
rem-square-sqrt87.4%
unpow1/287.4%
rem-exp-log82.0%
exp-neg82.0%
exp-prod82.0%
distribute-lft-neg-out82.0%
distribute-rgt-neg-in82.0%
metadata-eval82.0%
exp-to-pow87.4%
Simplified87.4%
Final simplification82.2%
(FPCore (re im)
:precision binary64
(let* ((t_0 (* 0.5 (sqrt (* re -4.0))))
(t_1 (* 0.5 (sqrt (* im 2.0))))
(t_2 (* 0.5 (/ im (sqrt re))))
(t_3 (* 0.5 (sqrt (* 2.0 (- im re))))))
(if (<= re -1.15e+77)
t_0
(if (<= re -150000.0)
t_3
(if (<= re -5.8e-61)
t_0
(if (<= re -1.35e-92)
t_1
(if (<= re -5.5e-99)
t_0
(if (<= re -8.5e-133)
t_3
(if (<= re -1.32e-136)
t_0
(if (<= re 1.2e-52)
t_3
(if (<= re 4e+24)
t_2
(if (<= re 1.02e+58)
t_1
(if (<= re 2.9e+72)
t_2
(if (<= re 2.3e+125)
t_1
(* 0.5 (* im (pow re -0.5)))))))))))))))))
double code(double re, double im) {
double t_0 = 0.5 * sqrt((re * -4.0));
double t_1 = 0.5 * sqrt((im * 2.0));
double t_2 = 0.5 * (im / sqrt(re));
double t_3 = 0.5 * sqrt((2.0 * (im - re)));
double tmp;
if (re <= -1.15e+77) {
tmp = t_0;
} else if (re <= -150000.0) {
tmp = t_3;
} else if (re <= -5.8e-61) {
tmp = t_0;
} else if (re <= -1.35e-92) {
tmp = t_1;
} else if (re <= -5.5e-99) {
tmp = t_0;
} else if (re <= -8.5e-133) {
tmp = t_3;
} else if (re <= -1.32e-136) {
tmp = t_0;
} else if (re <= 1.2e-52) {
tmp = t_3;
} else if (re <= 4e+24) {
tmp = t_2;
} else if (re <= 1.02e+58) {
tmp = t_1;
} else if (re <= 2.9e+72) {
tmp = t_2;
} else if (re <= 2.3e+125) {
tmp = t_1;
} else {
tmp = 0.5 * (im * pow(re, -0.5));
}
return tmp;
}
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) :: tmp
t_0 = 0.5d0 * sqrt((re * (-4.0d0)))
t_1 = 0.5d0 * sqrt((im * 2.0d0))
t_2 = 0.5d0 * (im / sqrt(re))
t_3 = 0.5d0 * sqrt((2.0d0 * (im - re)))
if (re <= (-1.15d+77)) then
tmp = t_0
else if (re <= (-150000.0d0)) then
tmp = t_3
else if (re <= (-5.8d-61)) then
tmp = t_0
else if (re <= (-1.35d-92)) then
tmp = t_1
else if (re <= (-5.5d-99)) then
tmp = t_0
else if (re <= (-8.5d-133)) then
tmp = t_3
else if (re <= (-1.32d-136)) then
tmp = t_0
else if (re <= 1.2d-52) then
tmp = t_3
else if (re <= 4d+24) then
tmp = t_2
else if (re <= 1.02d+58) then
tmp = t_1
else if (re <= 2.9d+72) then
tmp = t_2
else if (re <= 2.3d+125) then
tmp = t_1
else
tmp = 0.5d0 * (im * (re ** (-0.5d0)))
end if
code = tmp
end function
public static double code(double re, double im) {
double t_0 = 0.5 * Math.sqrt((re * -4.0));
double t_1 = 0.5 * Math.sqrt((im * 2.0));
double t_2 = 0.5 * (im / Math.sqrt(re));
double t_3 = 0.5 * Math.sqrt((2.0 * (im - re)));
double tmp;
if (re <= -1.15e+77) {
tmp = t_0;
} else if (re <= -150000.0) {
tmp = t_3;
} else if (re <= -5.8e-61) {
tmp = t_0;
} else if (re <= -1.35e-92) {
tmp = t_1;
} else if (re <= -5.5e-99) {
tmp = t_0;
} else if (re <= -8.5e-133) {
tmp = t_3;
} else if (re <= -1.32e-136) {
tmp = t_0;
} else if (re <= 1.2e-52) {
tmp = t_3;
} else if (re <= 4e+24) {
tmp = t_2;
} else if (re <= 1.02e+58) {
tmp = t_1;
} else if (re <= 2.9e+72) {
tmp = t_2;
} else if (re <= 2.3e+125) {
tmp = t_1;
} else {
tmp = 0.5 * (im * Math.pow(re, -0.5));
}
return tmp;
}
def code(re, im): t_0 = 0.5 * math.sqrt((re * -4.0)) t_1 = 0.5 * math.sqrt((im * 2.0)) t_2 = 0.5 * (im / math.sqrt(re)) t_3 = 0.5 * math.sqrt((2.0 * (im - re))) tmp = 0 if re <= -1.15e+77: tmp = t_0 elif re <= -150000.0: tmp = t_3 elif re <= -5.8e-61: tmp = t_0 elif re <= -1.35e-92: tmp = t_1 elif re <= -5.5e-99: tmp = t_0 elif re <= -8.5e-133: tmp = t_3 elif re <= -1.32e-136: tmp = t_0 elif re <= 1.2e-52: tmp = t_3 elif re <= 4e+24: tmp = t_2 elif re <= 1.02e+58: tmp = t_1 elif re <= 2.9e+72: tmp = t_2 elif re <= 2.3e+125: tmp = t_1 else: tmp = 0.5 * (im * math.pow(re, -0.5)) return tmp
function code(re, im) t_0 = Float64(0.5 * sqrt(Float64(re * -4.0))) t_1 = Float64(0.5 * sqrt(Float64(im * 2.0))) t_2 = Float64(0.5 * Float64(im / sqrt(re))) t_3 = Float64(0.5 * sqrt(Float64(2.0 * Float64(im - re)))) tmp = 0.0 if (re <= -1.15e+77) tmp = t_0; elseif (re <= -150000.0) tmp = t_3; elseif (re <= -5.8e-61) tmp = t_0; elseif (re <= -1.35e-92) tmp = t_1; elseif (re <= -5.5e-99) tmp = t_0; elseif (re <= -8.5e-133) tmp = t_3; elseif (re <= -1.32e-136) tmp = t_0; elseif (re <= 1.2e-52) tmp = t_3; elseif (re <= 4e+24) tmp = t_2; elseif (re <= 1.02e+58) tmp = t_1; elseif (re <= 2.9e+72) tmp = t_2; elseif (re <= 2.3e+125) tmp = t_1; else tmp = Float64(0.5 * Float64(im * (re ^ -0.5))); end return tmp end
function tmp_2 = code(re, im) t_0 = 0.5 * sqrt((re * -4.0)); t_1 = 0.5 * sqrt((im * 2.0)); t_2 = 0.5 * (im / sqrt(re)); t_3 = 0.5 * sqrt((2.0 * (im - re))); tmp = 0.0; if (re <= -1.15e+77) tmp = t_0; elseif (re <= -150000.0) tmp = t_3; elseif (re <= -5.8e-61) tmp = t_0; elseif (re <= -1.35e-92) tmp = t_1; elseif (re <= -5.5e-99) tmp = t_0; elseif (re <= -8.5e-133) tmp = t_3; elseif (re <= -1.32e-136) tmp = t_0; elseif (re <= 1.2e-52) tmp = t_3; elseif (re <= 4e+24) tmp = t_2; elseif (re <= 1.02e+58) tmp = t_1; elseif (re <= 2.9e+72) tmp = t_2; elseif (re <= 2.3e+125) tmp = t_1; else tmp = 0.5 * (im * (re ^ -0.5)); end tmp_2 = tmp; end
code[re_, im_] := Block[{t$95$0 = N[(0.5 * N[Sqrt[N[(re * -4.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(0.5 * N[Sqrt[N[(im * 2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(0.5 * N[(im / N[Sqrt[re], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[(0.5 * N[Sqrt[N[(2.0 * N[(im - re), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[re, -1.15e+77], t$95$0, If[LessEqual[re, -150000.0], t$95$3, If[LessEqual[re, -5.8e-61], t$95$0, If[LessEqual[re, -1.35e-92], t$95$1, If[LessEqual[re, -5.5e-99], t$95$0, If[LessEqual[re, -8.5e-133], t$95$3, If[LessEqual[re, -1.32e-136], t$95$0, If[LessEqual[re, 1.2e-52], t$95$3, If[LessEqual[re, 4e+24], t$95$2, If[LessEqual[re, 1.02e+58], t$95$1, If[LessEqual[re, 2.9e+72], t$95$2, If[LessEqual[re, 2.3e+125], t$95$1, N[(0.5 * N[(im * N[Power[re, -0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0.5 \cdot \sqrt{re \cdot -4}\\
t_1 := 0.5 \cdot \sqrt{im \cdot 2}\\
t_2 := 0.5 \cdot \frac{im}{\sqrt{re}}\\
t_3 := 0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\mathbf{if}\;re \leq -1.15 \cdot 10^{+77}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;re \leq -150000:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;re \leq -5.8 \cdot 10^{-61}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;re \leq -1.35 \cdot 10^{-92}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;re \leq -5.5 \cdot 10^{-99}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;re \leq -8.5 \cdot 10^{-133}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;re \leq -1.32 \cdot 10^{-136}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;re \leq 1.2 \cdot 10^{-52}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;re \leq 4 \cdot 10^{+24}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;re \leq 1.02 \cdot 10^{+58}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;re \leq 2.9 \cdot 10^{+72}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;re \leq 2.3 \cdot 10^{+125}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(im \cdot {re}^{-0.5}\right)\\
\end{array}
\end{array}
if re < -1.14999999999999997e77 or -1.5e5 < re < -5.7999999999999999e-61 or -1.34999999999999998e-92 < re < -5.49999999999999991e-99 or -8.49999999999999957e-133 < re < -1.3200000000000001e-136Initial program 42.5%
Taylor expanded in re around -inf 83.1%
*-commutative83.1%
Simplified83.1%
if -1.14999999999999997e77 < re < -1.5e5 or -5.49999999999999991e-99 < re < -8.49999999999999957e-133 or -1.3200000000000001e-136 < re < 1.2000000000000001e-52Initial program 57.0%
Taylor expanded in re around 0 79.8%
if -5.7999999999999999e-61 < re < -1.34999999999999998e-92 or 3.9999999999999999e24 < re < 1.02000000000000005e58 or 2.90000000000000017e72 < re < 2.30000000000000013e125Initial program 53.4%
Taylor expanded in re around 0 86.3%
*-commutative86.3%
Simplified86.3%
if 1.2000000000000001e-52 < re < 3.9999999999999999e24 or 1.02000000000000005e58 < re < 2.90000000000000017e72Initial program 27.7%
Taylor expanded in re around inf 28.4%
pow1/228.4%
div-inv28.4%
unpow-prod-down33.1%
pow1/233.1%
inv-pow33.1%
pow-pow33.1%
metadata-eval33.1%
Applied egg-rr33.1%
*-commutative33.1%
unpow233.1%
rem-sqrt-square76.5%
Simplified76.5%
*-commutative76.5%
metadata-eval76.5%
pow-flip76.5%
pow1/276.5%
div-inv76.6%
add-sqr-sqrt76.1%
fabs-sqr76.1%
add-sqr-sqrt76.6%
Applied egg-rr76.6%
if 2.30000000000000013e125 < re Initial program 3.0%
Taylor expanded in re around inf 54.9%
pow1/254.9%
div-inv54.9%
unpow-prod-down68.8%
pow1/268.8%
inv-pow68.8%
pow-pow68.8%
metadata-eval68.8%
Applied egg-rr68.8%
*-commutative68.8%
unpow268.8%
rem-sqrt-square87.4%
Simplified87.4%
Taylor expanded in re around 0 87.4%
rem-square-sqrt87.0%
fabs-sqr87.0%
rem-square-sqrt87.4%
unpow1/287.4%
rem-exp-log82.0%
exp-neg82.0%
exp-prod82.0%
distribute-lft-neg-out82.0%
distribute-rgt-neg-in82.0%
metadata-eval82.0%
exp-to-pow87.4%
Simplified87.4%
Final simplification82.2%
(FPCore (re im)
:precision binary64
(let* ((t_0 (* 0.5 (sqrt (* re -4.0))))
(t_1 (* 0.5 (/ im (sqrt re))))
(t_2 (* 0.5 (sqrt (* im 2.0)))))
(if (<= re -2.4e+77)
t_0
(if (<= re -0.00022)
t_2
(if (<= re -1.75e-43)
t_0
(if (<= re 2.9e-52)
t_2
(if (<= re 1.45e+21)
t_1
(if (<= re 1.95e+58)
t_2
(if (<= re 5.6e+72)
t_1
(if (<= re 2.15e+99)
t_2
(* 0.5 (* im (pow re -0.5)))))))))))))
double code(double re, double im) {
double t_0 = 0.5 * sqrt((re * -4.0));
double t_1 = 0.5 * (im / sqrt(re));
double t_2 = 0.5 * sqrt((im * 2.0));
double tmp;
if (re <= -2.4e+77) {
tmp = t_0;
} else if (re <= -0.00022) {
tmp = t_2;
} else if (re <= -1.75e-43) {
tmp = t_0;
} else if (re <= 2.9e-52) {
tmp = t_2;
} else if (re <= 1.45e+21) {
tmp = t_1;
} else if (re <= 1.95e+58) {
tmp = t_2;
} else if (re <= 5.6e+72) {
tmp = t_1;
} else if (re <= 2.15e+99) {
tmp = t_2;
} else {
tmp = 0.5 * (im * pow(re, -0.5));
}
return tmp;
}
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) :: tmp
t_0 = 0.5d0 * sqrt((re * (-4.0d0)))
t_1 = 0.5d0 * (im / sqrt(re))
t_2 = 0.5d0 * sqrt((im * 2.0d0))
if (re <= (-2.4d+77)) then
tmp = t_0
else if (re <= (-0.00022d0)) then
tmp = t_2
else if (re <= (-1.75d-43)) then
tmp = t_0
else if (re <= 2.9d-52) then
tmp = t_2
else if (re <= 1.45d+21) then
tmp = t_1
else if (re <= 1.95d+58) then
tmp = t_2
else if (re <= 5.6d+72) then
tmp = t_1
else if (re <= 2.15d+99) then
tmp = t_2
else
tmp = 0.5d0 * (im * (re ** (-0.5d0)))
end if
code = tmp
end function
public static double code(double re, double im) {
double t_0 = 0.5 * Math.sqrt((re * -4.0));
double t_1 = 0.5 * (im / Math.sqrt(re));
double t_2 = 0.5 * Math.sqrt((im * 2.0));
double tmp;
if (re <= -2.4e+77) {
tmp = t_0;
} else if (re <= -0.00022) {
tmp = t_2;
} else if (re <= -1.75e-43) {
tmp = t_0;
} else if (re <= 2.9e-52) {
tmp = t_2;
} else if (re <= 1.45e+21) {
tmp = t_1;
} else if (re <= 1.95e+58) {
tmp = t_2;
} else if (re <= 5.6e+72) {
tmp = t_1;
} else if (re <= 2.15e+99) {
tmp = t_2;
} else {
tmp = 0.5 * (im * Math.pow(re, -0.5));
}
return tmp;
}
def code(re, im): t_0 = 0.5 * math.sqrt((re * -4.0)) t_1 = 0.5 * (im / math.sqrt(re)) t_2 = 0.5 * math.sqrt((im * 2.0)) tmp = 0 if re <= -2.4e+77: tmp = t_0 elif re <= -0.00022: tmp = t_2 elif re <= -1.75e-43: tmp = t_0 elif re <= 2.9e-52: tmp = t_2 elif re <= 1.45e+21: tmp = t_1 elif re <= 1.95e+58: tmp = t_2 elif re <= 5.6e+72: tmp = t_1 elif re <= 2.15e+99: tmp = t_2 else: tmp = 0.5 * (im * math.pow(re, -0.5)) return tmp
function code(re, im) t_0 = Float64(0.5 * sqrt(Float64(re * -4.0))) t_1 = Float64(0.5 * Float64(im / sqrt(re))) t_2 = Float64(0.5 * sqrt(Float64(im * 2.0))) tmp = 0.0 if (re <= -2.4e+77) tmp = t_0; elseif (re <= -0.00022) tmp = t_2; elseif (re <= -1.75e-43) tmp = t_0; elseif (re <= 2.9e-52) tmp = t_2; elseif (re <= 1.45e+21) tmp = t_1; elseif (re <= 1.95e+58) tmp = t_2; elseif (re <= 5.6e+72) tmp = t_1; elseif (re <= 2.15e+99) tmp = t_2; else tmp = Float64(0.5 * Float64(im * (re ^ -0.5))); end return tmp end
function tmp_2 = code(re, im) t_0 = 0.5 * sqrt((re * -4.0)); t_1 = 0.5 * (im / sqrt(re)); t_2 = 0.5 * sqrt((im * 2.0)); tmp = 0.0; if (re <= -2.4e+77) tmp = t_0; elseif (re <= -0.00022) tmp = t_2; elseif (re <= -1.75e-43) tmp = t_0; elseif (re <= 2.9e-52) tmp = t_2; elseif (re <= 1.45e+21) tmp = t_1; elseif (re <= 1.95e+58) tmp = t_2; elseif (re <= 5.6e+72) tmp = t_1; elseif (re <= 2.15e+99) tmp = t_2; else tmp = 0.5 * (im * (re ^ -0.5)); end tmp_2 = tmp; end
code[re_, im_] := Block[{t$95$0 = N[(0.5 * N[Sqrt[N[(re * -4.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(0.5 * N[(im / N[Sqrt[re], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(0.5 * N[Sqrt[N[(im * 2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[re, -2.4e+77], t$95$0, If[LessEqual[re, -0.00022], t$95$2, If[LessEqual[re, -1.75e-43], t$95$0, If[LessEqual[re, 2.9e-52], t$95$2, If[LessEqual[re, 1.45e+21], t$95$1, If[LessEqual[re, 1.95e+58], t$95$2, If[LessEqual[re, 5.6e+72], t$95$1, If[LessEqual[re, 2.15e+99], t$95$2, N[(0.5 * N[(im * N[Power[re, -0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0.5 \cdot \sqrt{re \cdot -4}\\
t_1 := 0.5 \cdot \frac{im}{\sqrt{re}}\\
t_2 := 0.5 \cdot \sqrt{im \cdot 2}\\
\mathbf{if}\;re \leq -2.4 \cdot 10^{+77}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;re \leq -0.00022:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;re \leq -1.75 \cdot 10^{-43}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;re \leq 2.9 \cdot 10^{-52}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;re \leq 1.45 \cdot 10^{+21}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;re \leq 1.95 \cdot 10^{+58}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;re \leq 5.6 \cdot 10^{+72}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;re \leq 2.15 \cdot 10^{+99}:\\
\;\;\;\;t\_2\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(im \cdot {re}^{-0.5}\right)\\
\end{array}
\end{array}
if re < -2.3999999999999999e77 or -2.20000000000000008e-4 < re < -1.74999999999999999e-43Initial program 32.6%
Taylor expanded in re around -inf 83.1%
*-commutative83.1%
Simplified83.1%
if -2.3999999999999999e77 < re < -2.20000000000000008e-4 or -1.74999999999999999e-43 < re < 2.9000000000000002e-52 or 1.45e21 < re < 1.95000000000000005e58 or 5.5999999999999998e72 < re < 2.1500000000000001e99Initial program 59.1%
Taylor expanded in re around 0 75.9%
*-commutative75.9%
Simplified75.9%
if 2.9000000000000002e-52 < re < 1.45e21 or 1.95000000000000005e58 < re < 5.5999999999999998e72Initial program 27.7%
Taylor expanded in re around inf 28.4%
pow1/228.4%
div-inv28.4%
unpow-prod-down33.1%
pow1/233.1%
inv-pow33.1%
pow-pow33.1%
metadata-eval33.1%
Applied egg-rr33.1%
*-commutative33.1%
unpow233.1%
rem-sqrt-square76.5%
Simplified76.5%
*-commutative76.5%
metadata-eval76.5%
pow-flip76.5%
pow1/276.5%
div-inv76.6%
add-sqr-sqrt76.1%
fabs-sqr76.1%
add-sqr-sqrt76.6%
Applied egg-rr76.6%
if 2.1500000000000001e99 < re Initial program 7.7%
Taylor expanded in re around inf 52.6%
pow1/252.6%
div-inv52.7%
unpow-prod-down65.2%
pow1/265.2%
inv-pow65.2%
pow-pow65.2%
metadata-eval65.2%
Applied egg-rr65.2%
*-commutative65.2%
unpow265.2%
rem-sqrt-square82.0%
Simplified82.0%
Taylor expanded in re around 0 82.0%
rem-square-sqrt81.6%
fabs-sqr81.6%
rem-square-sqrt82.0%
unpow1/282.0%
rem-exp-log77.0%
exp-neg77.0%
exp-prod77.0%
distribute-lft-neg-out77.0%
distribute-rgt-neg-in77.0%
metadata-eval77.0%
exp-to-pow82.0%
Simplified82.0%
Final simplification78.5%
(FPCore (re im)
:precision binary64
(let* ((t_0 (* 0.5 (sqrt (* re -4.0)))) (t_1 (* 0.5 (sqrt (* im 2.0)))))
(if (<= re -4.1e+77)
t_0
(if (<= re -1.15e-5)
t_1
(if (<= re -1.6e-43)
t_0
(if (or (<= re 3.15e-52)
(and (not (<= re 1.75e+22))
(or (<= re 1.3e+58)
(and (not (<= re 3.4e+70)) (<= re 1.46e+99)))))
t_1
(* 0.5 (/ im (sqrt re)))))))))
double code(double re, double im) {
double t_0 = 0.5 * sqrt((re * -4.0));
double t_1 = 0.5 * sqrt((im * 2.0));
double tmp;
if (re <= -4.1e+77) {
tmp = t_0;
} else if (re <= -1.15e-5) {
tmp = t_1;
} else if (re <= -1.6e-43) {
tmp = t_0;
} else if ((re <= 3.15e-52) || (!(re <= 1.75e+22) && ((re <= 1.3e+58) || (!(re <= 3.4e+70) && (re <= 1.46e+99))))) {
tmp = t_1;
} else {
tmp = 0.5 * (im / sqrt(re));
}
return tmp;
}
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) :: tmp
t_0 = 0.5d0 * sqrt((re * (-4.0d0)))
t_1 = 0.5d0 * sqrt((im * 2.0d0))
if (re <= (-4.1d+77)) then
tmp = t_0
else if (re <= (-1.15d-5)) then
tmp = t_1
else if (re <= (-1.6d-43)) then
tmp = t_0
else if ((re <= 3.15d-52) .or. (.not. (re <= 1.75d+22)) .and. (re <= 1.3d+58) .or. (.not. (re <= 3.4d+70)) .and. (re <= 1.46d+99)) then
tmp = t_1
else
tmp = 0.5d0 * (im / sqrt(re))
end if
code = tmp
end function
public static double code(double re, double im) {
double t_0 = 0.5 * Math.sqrt((re * -4.0));
double t_1 = 0.5 * Math.sqrt((im * 2.0));
double tmp;
if (re <= -4.1e+77) {
tmp = t_0;
} else if (re <= -1.15e-5) {
tmp = t_1;
} else if (re <= -1.6e-43) {
tmp = t_0;
} else if ((re <= 3.15e-52) || (!(re <= 1.75e+22) && ((re <= 1.3e+58) || (!(re <= 3.4e+70) && (re <= 1.46e+99))))) {
tmp = t_1;
} else {
tmp = 0.5 * (im / Math.sqrt(re));
}
return tmp;
}
def code(re, im): t_0 = 0.5 * math.sqrt((re * -4.0)) t_1 = 0.5 * math.sqrt((im * 2.0)) tmp = 0 if re <= -4.1e+77: tmp = t_0 elif re <= -1.15e-5: tmp = t_1 elif re <= -1.6e-43: tmp = t_0 elif (re <= 3.15e-52) or (not (re <= 1.75e+22) and ((re <= 1.3e+58) or (not (re <= 3.4e+70) and (re <= 1.46e+99)))): tmp = t_1 else: tmp = 0.5 * (im / math.sqrt(re)) return tmp
function code(re, im) t_0 = Float64(0.5 * sqrt(Float64(re * -4.0))) t_1 = Float64(0.5 * sqrt(Float64(im * 2.0))) tmp = 0.0 if (re <= -4.1e+77) tmp = t_0; elseif (re <= -1.15e-5) tmp = t_1; elseif (re <= -1.6e-43) tmp = t_0; elseif ((re <= 3.15e-52) || (!(re <= 1.75e+22) && ((re <= 1.3e+58) || (!(re <= 3.4e+70) && (re <= 1.46e+99))))) tmp = t_1; else tmp = Float64(0.5 * Float64(im / sqrt(re))); end return tmp end
function tmp_2 = code(re, im) t_0 = 0.5 * sqrt((re * -4.0)); t_1 = 0.5 * sqrt((im * 2.0)); tmp = 0.0; if (re <= -4.1e+77) tmp = t_0; elseif (re <= -1.15e-5) tmp = t_1; elseif (re <= -1.6e-43) tmp = t_0; elseif ((re <= 3.15e-52) || (~((re <= 1.75e+22)) && ((re <= 1.3e+58) || (~((re <= 3.4e+70)) && (re <= 1.46e+99))))) tmp = t_1; else tmp = 0.5 * (im / sqrt(re)); end tmp_2 = tmp; end
code[re_, im_] := Block[{t$95$0 = N[(0.5 * N[Sqrt[N[(re * -4.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(0.5 * N[Sqrt[N[(im * 2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[re, -4.1e+77], t$95$0, If[LessEqual[re, -1.15e-5], t$95$1, If[LessEqual[re, -1.6e-43], t$95$0, If[Or[LessEqual[re, 3.15e-52], And[N[Not[LessEqual[re, 1.75e+22]], $MachinePrecision], Or[LessEqual[re, 1.3e+58], And[N[Not[LessEqual[re, 3.4e+70]], $MachinePrecision], LessEqual[re, 1.46e+99]]]]], t$95$1, N[(0.5 * N[(im / N[Sqrt[re], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0.5 \cdot \sqrt{re \cdot -4}\\
t_1 := 0.5 \cdot \sqrt{im \cdot 2}\\
\mathbf{if}\;re \leq -4.1 \cdot 10^{+77}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;re \leq -1.15 \cdot 10^{-5}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;re \leq -1.6 \cdot 10^{-43}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;re \leq 3.15 \cdot 10^{-52} \lor \neg \left(re \leq 1.75 \cdot 10^{+22}\right) \land \left(re \leq 1.3 \cdot 10^{+58} \lor \neg \left(re \leq 3.4 \cdot 10^{+70}\right) \land re \leq 1.46 \cdot 10^{+99}\right):\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \frac{im}{\sqrt{re}}\\
\end{array}
\end{array}
if re < -4.1000000000000001e77 or -1.15e-5 < re < -1.59999999999999992e-43Initial program 32.6%
Taylor expanded in re around -inf 83.1%
*-commutative83.1%
Simplified83.1%
if -4.1000000000000001e77 < re < -1.15e-5 or -1.59999999999999992e-43 < re < 3.1500000000000002e-52 or 1.75e22 < re < 1.29999999999999994e58 or 3.4000000000000001e70 < re < 1.4600000000000001e99Initial program 59.1%
Taylor expanded in re around 0 75.9%
*-commutative75.9%
Simplified75.9%
if 3.1500000000000002e-52 < re < 1.75e22 or 1.29999999999999994e58 < re < 3.4000000000000001e70 or 1.4600000000000001e99 < re Initial program 14.3%
Taylor expanded in re around inf 44.7%
pow1/244.7%
div-inv44.7%
unpow-prod-down54.7%
pow1/254.7%
inv-pow54.7%
pow-pow54.7%
metadata-eval54.7%
Applied egg-rr54.7%
*-commutative54.7%
unpow254.7%
rem-sqrt-square80.2%
Simplified80.2%
*-commutative80.2%
metadata-eval80.2%
pow-flip80.2%
pow1/280.2%
div-inv80.2%
add-sqr-sqrt79.8%
fabs-sqr79.8%
add-sqr-sqrt80.2%
Applied egg-rr80.2%
Final simplification78.5%
(FPCore (re im) :precision binary64 (if (or (<= re -5.8e+77) (and (not (<= re -0.85)) (<= re -1.7e-43))) (* 0.5 (sqrt (* re -4.0))) (* 0.5 (sqrt (* im 2.0)))))
double code(double re, double im) {
double tmp;
if ((re <= -5.8e+77) || (!(re <= -0.85) && (re <= -1.7e-43))) {
tmp = 0.5 * sqrt((re * -4.0));
} else {
tmp = 0.5 * sqrt((im * 2.0));
}
return tmp;
}
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
real(8) :: tmp
if ((re <= (-5.8d+77)) .or. (.not. (re <= (-0.85d0))) .and. (re <= (-1.7d-43))) then
tmp = 0.5d0 * sqrt((re * (-4.0d0)))
else
tmp = 0.5d0 * sqrt((im * 2.0d0))
end if
code = tmp
end function
public static double code(double re, double im) {
double tmp;
if ((re <= -5.8e+77) || (!(re <= -0.85) && (re <= -1.7e-43))) {
tmp = 0.5 * Math.sqrt((re * -4.0));
} else {
tmp = 0.5 * Math.sqrt((im * 2.0));
}
return tmp;
}
def code(re, im): tmp = 0 if (re <= -5.8e+77) or (not (re <= -0.85) and (re <= -1.7e-43)): tmp = 0.5 * math.sqrt((re * -4.0)) else: tmp = 0.5 * math.sqrt((im * 2.0)) return tmp
function code(re, im) tmp = 0.0 if ((re <= -5.8e+77) || (!(re <= -0.85) && (re <= -1.7e-43))) tmp = Float64(0.5 * sqrt(Float64(re * -4.0))); else tmp = Float64(0.5 * sqrt(Float64(im * 2.0))); end return tmp end
function tmp_2 = code(re, im) tmp = 0.0; if ((re <= -5.8e+77) || (~((re <= -0.85)) && (re <= -1.7e-43))) tmp = 0.5 * sqrt((re * -4.0)); else tmp = 0.5 * sqrt((im * 2.0)); end tmp_2 = tmp; end
code[re_, im_] := If[Or[LessEqual[re, -5.8e+77], And[N[Not[LessEqual[re, -0.85]], $MachinePrecision], LessEqual[re, -1.7e-43]]], N[(0.5 * N[Sqrt[N[(re * -4.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(0.5 * N[Sqrt[N[(im * 2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;re \leq -5.8 \cdot 10^{+77} \lor \neg \left(re \leq -0.85\right) \land re \leq -1.7 \cdot 10^{-43}:\\
\;\;\;\;0.5 \cdot \sqrt{re \cdot -4}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{im \cdot 2}\\
\end{array}
\end{array}
if re < -5.8000000000000003e77 or -0.849999999999999978 < re < -1.7e-43Initial program 32.6%
Taylor expanded in re around -inf 83.1%
*-commutative83.1%
Simplified83.1%
if -5.8000000000000003e77 < re < -0.849999999999999978 or -1.7e-43 < re Initial program 45.6%
Taylor expanded in re around 0 60.8%
*-commutative60.8%
Simplified60.8%
Final simplification65.5%
(FPCore (re im) :precision binary64 (* 0.5 (sqrt (* im 2.0))))
double code(double re, double im) {
return 0.5 * sqrt((im * 2.0));
}
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
code = 0.5d0 * sqrt((im * 2.0d0))
end function
public static double code(double re, double im) {
return 0.5 * Math.sqrt((im * 2.0));
}
def code(re, im): return 0.5 * math.sqrt((im * 2.0))
function code(re, im) return Float64(0.5 * sqrt(Float64(im * 2.0))) end
function tmp = code(re, im) tmp = 0.5 * sqrt((im * 2.0)); end
code[re_, im_] := N[(0.5 * N[Sqrt[N[(im * 2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
0.5 \cdot \sqrt{im \cdot 2}
\end{array}
Initial program 42.8%
Taylor expanded in re around 0 52.7%
*-commutative52.7%
Simplified52.7%
herbie shell --seed 2024107
(FPCore (re im)
:name "math.sqrt on complex, imaginary part, im greater than 0 branch"
:precision binary64
:pre (> im 0.0)
(* 0.5 (sqrt (* 2.0 (- (sqrt (+ (* re re) (* im im))) re)))))