
(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 9 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 (<= (+ re (sqrt (+ (* re re) (* im im)))) 0.0) (* 0.5 (sqrt (* 2.0 (* (/ im (/ re im)) -0.5)))) (sqrt (* 0.5 (+ re (hypot re im))))))
double code(double re, double im) {
double tmp;
if ((re + sqrt(((re * re) + (im * im)))) <= 0.0) {
tmp = 0.5 * sqrt((2.0 * ((im / (re / im)) * -0.5)));
} else {
tmp = sqrt((0.5 * (re + hypot(re, im))));
}
return tmp;
}
public static double code(double re, double im) {
double tmp;
if ((re + Math.sqrt(((re * re) + (im * im)))) <= 0.0) {
tmp = 0.5 * Math.sqrt((2.0 * ((im / (re / im)) * -0.5)));
} else {
tmp = Math.sqrt((0.5 * (re + Math.hypot(re, im))));
}
return tmp;
}
def code(re, im): tmp = 0 if (re + math.sqrt(((re * re) + (im * im)))) <= 0.0: tmp = 0.5 * math.sqrt((2.0 * ((im / (re / im)) * -0.5))) else: tmp = math.sqrt((0.5 * (re + math.hypot(re, im)))) return tmp
function code(re, im) tmp = 0.0 if (Float64(re + sqrt(Float64(Float64(re * re) + Float64(im * im)))) <= 0.0) tmp = Float64(0.5 * sqrt(Float64(2.0 * Float64(Float64(im / Float64(re / im)) * -0.5)))); else tmp = sqrt(Float64(0.5 * Float64(re + hypot(re, im)))); end return tmp end
function tmp_2 = code(re, im) tmp = 0.0; if ((re + sqrt(((re * re) + (im * im)))) <= 0.0) tmp = 0.5 * sqrt((2.0 * ((im / (re / im)) * -0.5))); else tmp = sqrt((0.5 * (re + hypot(re, im)))); end tmp_2 = tmp; end
code[re_, im_] := If[LessEqual[N[(re + N[Sqrt[N[(N[(re * re), $MachinePrecision] + N[(im * im), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 0.0], N[(0.5 * N[Sqrt[N[(2.0 * N[(N[(im / N[(re / im), $MachinePrecision]), $MachinePrecision] * -0.5), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[Sqrt[N[(0.5 * N[(re + N[Sqrt[re ^ 2 + im ^ 2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;re + \sqrt{re \cdot re + im \cdot im} \leq 0:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\frac{im}{\frac{re}{im}} \cdot -0.5\right)}\\
\mathbf{else}:\\
\;\;\;\;\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\\
\end{array}
\end{array}
if (+.f64 (sqrt.f64 (+.f64 (*.f64 re re) (*.f64 im im))) re) < 0.0Initial program 3.2%
Taylor expanded in re around -inf 31.0%
*-commutative31.0%
unpow231.0%
associate-/l*56.5%
Simplified56.5%
if 0.0 < (+.f64 (sqrt.f64 (+.f64 (*.f64 re re) (*.f64 im im))) re) Initial program 47.5%
add-sqr-sqrt47.2%
sqrt-unprod47.5%
*-commutative47.5%
*-commutative47.5%
swap-sqr47.5%
add-sqr-sqrt47.5%
*-commutative47.5%
+-commutative47.5%
hypot-def92.4%
metadata-eval92.4%
Applied egg-rr92.4%
associate-*l*92.4%
metadata-eval92.4%
Simplified92.4%
Final simplification87.8%
(FPCore (re im)
:precision binary64
(if (<= im -1.35e-117)
(* 0.5 (sqrt (* 2.0 (- re im))))
(if (<= im -3.2e-234)
(sqrt re)
(if (<= im -7e-278)
(* 0.5 (/ (- im) (sqrt (- re))))
(if (<= im 2.5e-305)
(sqrt re)
(if (<= im 2.6e-190)
(* 0.5 (* im (sqrt (/ -1.0 re))))
(if (<= im 5e-112) (sqrt re) (* 0.5 (sqrt (* 2.0 (+ re im)))))))))))
double code(double re, double im) {
double tmp;
if (im <= -1.35e-117) {
tmp = 0.5 * sqrt((2.0 * (re - im)));
} else if (im <= -3.2e-234) {
tmp = sqrt(re);
} else if (im <= -7e-278) {
tmp = 0.5 * (-im / sqrt(-re));
} else if (im <= 2.5e-305) {
tmp = sqrt(re);
} else if (im <= 2.6e-190) {
tmp = 0.5 * (im * sqrt((-1.0 / re)));
} else if (im <= 5e-112) {
tmp = sqrt(re);
} else {
tmp = 0.5 * sqrt((2.0 * (re + im)));
}
return tmp;
}
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
real(8) :: tmp
if (im <= (-1.35d-117)) then
tmp = 0.5d0 * sqrt((2.0d0 * (re - im)))
else if (im <= (-3.2d-234)) then
tmp = sqrt(re)
else if (im <= (-7d-278)) then
tmp = 0.5d0 * (-im / sqrt(-re))
else if (im <= 2.5d-305) then
tmp = sqrt(re)
else if (im <= 2.6d-190) then
tmp = 0.5d0 * (im * sqrt(((-1.0d0) / re)))
else if (im <= 5d-112) then
tmp = sqrt(re)
else
tmp = 0.5d0 * sqrt((2.0d0 * (re + im)))
end if
code = tmp
end function
public static double code(double re, double im) {
double tmp;
if (im <= -1.35e-117) {
tmp = 0.5 * Math.sqrt((2.0 * (re - im)));
} else if (im <= -3.2e-234) {
tmp = Math.sqrt(re);
} else if (im <= -7e-278) {
tmp = 0.5 * (-im / Math.sqrt(-re));
} else if (im <= 2.5e-305) {
tmp = Math.sqrt(re);
} else if (im <= 2.6e-190) {
tmp = 0.5 * (im * Math.sqrt((-1.0 / re)));
} else if (im <= 5e-112) {
tmp = Math.sqrt(re);
} else {
tmp = 0.5 * Math.sqrt((2.0 * (re + im)));
}
return tmp;
}
def code(re, im): tmp = 0 if im <= -1.35e-117: tmp = 0.5 * math.sqrt((2.0 * (re - im))) elif im <= -3.2e-234: tmp = math.sqrt(re) elif im <= -7e-278: tmp = 0.5 * (-im / math.sqrt(-re)) elif im <= 2.5e-305: tmp = math.sqrt(re) elif im <= 2.6e-190: tmp = 0.5 * (im * math.sqrt((-1.0 / re))) elif im <= 5e-112: tmp = math.sqrt(re) else: tmp = 0.5 * math.sqrt((2.0 * (re + im))) return tmp
function code(re, im) tmp = 0.0 if (im <= -1.35e-117) tmp = Float64(0.5 * sqrt(Float64(2.0 * Float64(re - im)))); elseif (im <= -3.2e-234) tmp = sqrt(re); elseif (im <= -7e-278) tmp = Float64(0.5 * Float64(Float64(-im) / sqrt(Float64(-re)))); elseif (im <= 2.5e-305) tmp = sqrt(re); elseif (im <= 2.6e-190) tmp = Float64(0.5 * Float64(im * sqrt(Float64(-1.0 / re)))); elseif (im <= 5e-112) tmp = sqrt(re); else tmp = Float64(0.5 * sqrt(Float64(2.0 * Float64(re + im)))); end return tmp end
function tmp_2 = code(re, im) tmp = 0.0; if (im <= -1.35e-117) tmp = 0.5 * sqrt((2.0 * (re - im))); elseif (im <= -3.2e-234) tmp = sqrt(re); elseif (im <= -7e-278) tmp = 0.5 * (-im / sqrt(-re)); elseif (im <= 2.5e-305) tmp = sqrt(re); elseif (im <= 2.6e-190) tmp = 0.5 * (im * sqrt((-1.0 / re))); elseif (im <= 5e-112) tmp = sqrt(re); else tmp = 0.5 * sqrt((2.0 * (re + im))); end tmp_2 = tmp; end
code[re_, im_] := If[LessEqual[im, -1.35e-117], N[(0.5 * N[Sqrt[N[(2.0 * N[(re - im), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[im, -3.2e-234], N[Sqrt[re], $MachinePrecision], If[LessEqual[im, -7e-278], N[(0.5 * N[((-im) / N[Sqrt[(-re)], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[im, 2.5e-305], N[Sqrt[re], $MachinePrecision], If[LessEqual[im, 2.6e-190], N[(0.5 * N[(im * N[Sqrt[N[(-1.0 / re), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[im, 5e-112], N[Sqrt[re], $MachinePrecision], N[(0.5 * N[Sqrt[N[(2.0 * N[(re + im), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;im \leq -1.35 \cdot 10^{-117}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re - im\right)}\\
\mathbf{elif}\;im \leq -3.2 \cdot 10^{-234}:\\
\;\;\;\;\sqrt{re}\\
\mathbf{elif}\;im \leq -7 \cdot 10^{-278}:\\
\;\;\;\;0.5 \cdot \frac{-im}{\sqrt{-re}}\\
\mathbf{elif}\;im \leq 2.5 \cdot 10^{-305}:\\
\;\;\;\;\sqrt{re}\\
\mathbf{elif}\;im \leq 2.6 \cdot 10^{-190}:\\
\;\;\;\;0.5 \cdot \left(im \cdot \sqrt{\frac{-1}{re}}\right)\\
\mathbf{elif}\;im \leq 5 \cdot 10^{-112}:\\
\;\;\;\;\sqrt{re}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + im\right)}\\
\end{array}
\end{array}
if im < -1.35000000000000001e-117Initial program 43.2%
Taylor expanded in im around -inf 77.5%
mul-1-neg77.5%
sub-neg77.5%
Simplified77.5%
if -1.35000000000000001e-117 < im < -3.1999999999999999e-234 or -6.99999999999999941e-278 < im < 2.49999999999999993e-305 or 2.5999999999999998e-190 < im < 5.00000000000000044e-112Initial program 47.6%
Taylor expanded in im around 0 60.2%
associate-*r*60.2%
unpow260.2%
rem-square-sqrt61.4%
metadata-eval61.4%
*-lft-identity61.4%
Simplified61.4%
if -3.1999999999999999e-234 < im < -6.99999999999999941e-278Initial program 14.2%
Taylor expanded in re around -inf 26.1%
*-commutative26.1%
associate-*l/26.1%
unpow226.1%
Simplified26.1%
sqrt-prod26.1%
associate-/l*26.1%
sqrt-div25.3%
sqrt-prod0.0%
add-sqr-sqrt24.4%
div-inv24.4%
metadata-eval24.4%
Applied egg-rr24.4%
*-commutative24.4%
associate-/r/24.4%
Simplified24.4%
frac-2neg24.4%
neg-sub024.4%
div-sub24.4%
sqrt-undiv24.4%
div-inv24.4%
metadata-eval24.4%
add-sqr-sqrt0.0%
sqrt-prod25.3%
sqr-neg25.3%
sqrt-unprod77.3%
add-sqr-sqrt77.4%
frac-2neg77.4%
sqrt-undiv77.4%
div-inv77.4%
metadata-eval77.4%
Applied egg-rr77.4%
div077.4%
neg-sub077.4%
distribute-neg-frac77.4%
associate-*l*77.4%
metadata-eval77.4%
*-commutative77.4%
neg-mul-177.4%
Simplified77.4%
if 2.49999999999999993e-305 < im < 2.5999999999999998e-190Initial program 12.2%
Taylor expanded in re around -inf 26.6%
*-commutative26.6%
associate-*l/26.6%
unpow226.6%
Simplified26.6%
sqrt-prod26.6%
associate-/l*26.6%
sqrt-div25.8%
sqrt-prod68.6%
add-sqr-sqrt68.7%
div-inv68.7%
metadata-eval68.7%
Applied egg-rr68.7%
*-commutative68.7%
associate-/r/68.7%
Simplified68.7%
div-inv68.8%
clear-num68.8%
sqrt-undiv69.0%
Applied egg-rr69.0%
*-commutative69.0%
associate-/r*69.0%
metadata-eval69.0%
Simplified69.0%
if 5.00000000000000044e-112 < im Initial program 47.7%
Taylor expanded in re around 0 73.7%
Final simplification72.3%
(FPCore (re im)
:precision binary64
(if (<= im -5.8e-118)
(* 0.5 (sqrt (* 2.0 (- re im))))
(if (<= im -2.8e-237)
(sqrt re)
(if (<= im -1.35e-277)
(* 0.5 (* im (/ 1.0 (- (sqrt (* 0.5 (* re -2.0)))))))
(if (<= im 1e-305)
(sqrt re)
(if (<= im 2.55e-197)
(* 0.5 (* im (sqrt (/ -1.0 re))))
(if (<= im 1.6e-112)
(sqrt re)
(* 0.5 (sqrt (* 2.0 (+ re im)))))))))))
double code(double re, double im) {
double tmp;
if (im <= -5.8e-118) {
tmp = 0.5 * sqrt((2.0 * (re - im)));
} else if (im <= -2.8e-237) {
tmp = sqrt(re);
} else if (im <= -1.35e-277) {
tmp = 0.5 * (im * (1.0 / -sqrt((0.5 * (re * -2.0)))));
} else if (im <= 1e-305) {
tmp = sqrt(re);
} else if (im <= 2.55e-197) {
tmp = 0.5 * (im * sqrt((-1.0 / re)));
} else if (im <= 1.6e-112) {
tmp = sqrt(re);
} else {
tmp = 0.5 * sqrt((2.0 * (re + im)));
}
return tmp;
}
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
real(8) :: tmp
if (im <= (-5.8d-118)) then
tmp = 0.5d0 * sqrt((2.0d0 * (re - im)))
else if (im <= (-2.8d-237)) then
tmp = sqrt(re)
else if (im <= (-1.35d-277)) then
tmp = 0.5d0 * (im * (1.0d0 / -sqrt((0.5d0 * (re * (-2.0d0))))))
else if (im <= 1d-305) then
tmp = sqrt(re)
else if (im <= 2.55d-197) then
tmp = 0.5d0 * (im * sqrt(((-1.0d0) / re)))
else if (im <= 1.6d-112) then
tmp = sqrt(re)
else
tmp = 0.5d0 * sqrt((2.0d0 * (re + im)))
end if
code = tmp
end function
public static double code(double re, double im) {
double tmp;
if (im <= -5.8e-118) {
tmp = 0.5 * Math.sqrt((2.0 * (re - im)));
} else if (im <= -2.8e-237) {
tmp = Math.sqrt(re);
} else if (im <= -1.35e-277) {
tmp = 0.5 * (im * (1.0 / -Math.sqrt((0.5 * (re * -2.0)))));
} else if (im <= 1e-305) {
tmp = Math.sqrt(re);
} else if (im <= 2.55e-197) {
tmp = 0.5 * (im * Math.sqrt((-1.0 / re)));
} else if (im <= 1.6e-112) {
tmp = Math.sqrt(re);
} else {
tmp = 0.5 * Math.sqrt((2.0 * (re + im)));
}
return tmp;
}
def code(re, im): tmp = 0 if im <= -5.8e-118: tmp = 0.5 * math.sqrt((2.0 * (re - im))) elif im <= -2.8e-237: tmp = math.sqrt(re) elif im <= -1.35e-277: tmp = 0.5 * (im * (1.0 / -math.sqrt((0.5 * (re * -2.0))))) elif im <= 1e-305: tmp = math.sqrt(re) elif im <= 2.55e-197: tmp = 0.5 * (im * math.sqrt((-1.0 / re))) elif im <= 1.6e-112: tmp = math.sqrt(re) else: tmp = 0.5 * math.sqrt((2.0 * (re + im))) return tmp
function code(re, im) tmp = 0.0 if (im <= -5.8e-118) tmp = Float64(0.5 * sqrt(Float64(2.0 * Float64(re - im)))); elseif (im <= -2.8e-237) tmp = sqrt(re); elseif (im <= -1.35e-277) tmp = Float64(0.5 * Float64(im * Float64(1.0 / Float64(-sqrt(Float64(0.5 * Float64(re * -2.0))))))); elseif (im <= 1e-305) tmp = sqrt(re); elseif (im <= 2.55e-197) tmp = Float64(0.5 * Float64(im * sqrt(Float64(-1.0 / re)))); elseif (im <= 1.6e-112) tmp = sqrt(re); else tmp = Float64(0.5 * sqrt(Float64(2.0 * Float64(re + im)))); end return tmp end
function tmp_2 = code(re, im) tmp = 0.0; if (im <= -5.8e-118) tmp = 0.5 * sqrt((2.0 * (re - im))); elseif (im <= -2.8e-237) tmp = sqrt(re); elseif (im <= -1.35e-277) tmp = 0.5 * (im * (1.0 / -sqrt((0.5 * (re * -2.0))))); elseif (im <= 1e-305) tmp = sqrt(re); elseif (im <= 2.55e-197) tmp = 0.5 * (im * sqrt((-1.0 / re))); elseif (im <= 1.6e-112) tmp = sqrt(re); else tmp = 0.5 * sqrt((2.0 * (re + im))); end tmp_2 = tmp; end
code[re_, im_] := If[LessEqual[im, -5.8e-118], N[(0.5 * N[Sqrt[N[(2.0 * N[(re - im), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[im, -2.8e-237], N[Sqrt[re], $MachinePrecision], If[LessEqual[im, -1.35e-277], N[(0.5 * N[(im * N[(1.0 / (-N[Sqrt[N[(0.5 * N[(re * -2.0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision])), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[im, 1e-305], N[Sqrt[re], $MachinePrecision], If[LessEqual[im, 2.55e-197], N[(0.5 * N[(im * N[Sqrt[N[(-1.0 / re), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[im, 1.6e-112], N[Sqrt[re], $MachinePrecision], N[(0.5 * N[Sqrt[N[(2.0 * N[(re + im), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;im \leq -5.8 \cdot 10^{-118}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re - im\right)}\\
\mathbf{elif}\;im \leq -2.8 \cdot 10^{-237}:\\
\;\;\;\;\sqrt{re}\\
\mathbf{elif}\;im \leq -1.35 \cdot 10^{-277}:\\
\;\;\;\;0.5 \cdot \left(im \cdot \frac{1}{-\sqrt{0.5 \cdot \left(re \cdot -2\right)}}\right)\\
\mathbf{elif}\;im \leq 10^{-305}:\\
\;\;\;\;\sqrt{re}\\
\mathbf{elif}\;im \leq 2.55 \cdot 10^{-197}:\\
\;\;\;\;0.5 \cdot \left(im \cdot \sqrt{\frac{-1}{re}}\right)\\
\mathbf{elif}\;im \leq 1.6 \cdot 10^{-112}:\\
\;\;\;\;\sqrt{re}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + im\right)}\\
\end{array}
\end{array}
if im < -5.79999999999999961e-118Initial program 43.2%
Taylor expanded in im around -inf 77.5%
mul-1-neg77.5%
sub-neg77.5%
Simplified77.5%
if -5.79999999999999961e-118 < im < -2.79999999999999997e-237 or -1.34999999999999988e-277 < im < 9.99999999999999996e-306 or 2.5500000000000001e-197 < im < 1.59999999999999997e-112Initial program 47.6%
Taylor expanded in im around 0 60.2%
associate-*r*60.2%
unpow260.2%
rem-square-sqrt61.4%
metadata-eval61.4%
*-lft-identity61.4%
Simplified61.4%
if -2.79999999999999997e-237 < im < -1.34999999999999988e-277Initial program 14.2%
Taylor expanded in re around -inf 26.1%
*-commutative26.1%
associate-*l/26.1%
unpow226.1%
Simplified26.1%
sqrt-prod26.1%
associate-/l*26.1%
sqrt-div25.3%
sqrt-prod0.0%
add-sqr-sqrt24.4%
div-inv24.4%
metadata-eval24.4%
Applied egg-rr24.4%
*-commutative24.4%
associate-/r/24.4%
Simplified24.4%
frac-2neg24.4%
div-inv24.4%
add-sqr-sqrt24.4%
sqrt-unprod25.3%
sqr-neg25.3%
sqrt-prod0.0%
add-sqr-sqrt77.6%
sqrt-undiv77.6%
div-inv77.6%
metadata-eval77.6%
Applied egg-rr77.6%
if 9.99999999999999996e-306 < im < 2.5500000000000001e-197Initial program 12.2%
Taylor expanded in re around -inf 26.6%
*-commutative26.6%
associate-*l/26.6%
unpow226.6%
Simplified26.6%
sqrt-prod26.6%
associate-/l*26.6%
sqrt-div25.8%
sqrt-prod68.6%
add-sqr-sqrt68.7%
div-inv68.7%
metadata-eval68.7%
Applied egg-rr68.7%
*-commutative68.7%
associate-/r/68.7%
Simplified68.7%
div-inv68.8%
clear-num68.8%
sqrt-undiv69.0%
Applied egg-rr69.0%
*-commutative69.0%
associate-/r*69.0%
metadata-eval69.0%
Simplified69.0%
if 1.59999999999999997e-112 < im Initial program 47.7%
Taylor expanded in re around 0 73.7%
Final simplification72.3%
(FPCore (re im)
:precision binary64
(if (<= im -1.3e-118)
(* 0.5 (sqrt (* 2.0 (- re im))))
(if (<= im 1.95e-305)
(sqrt re)
(if (<= im 1.45e-194)
(* 0.5 (/ im (sqrt (- re))))
(if (<= im 2.65e-110) (sqrt re) (* 0.5 (sqrt (* 2.0 (+ re im)))))))))
double code(double re, double im) {
double tmp;
if (im <= -1.3e-118) {
tmp = 0.5 * sqrt((2.0 * (re - im)));
} else if (im <= 1.95e-305) {
tmp = sqrt(re);
} else if (im <= 1.45e-194) {
tmp = 0.5 * (im / sqrt(-re));
} else if (im <= 2.65e-110) {
tmp = sqrt(re);
} else {
tmp = 0.5 * sqrt((2.0 * (re + im)));
}
return tmp;
}
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
real(8) :: tmp
if (im <= (-1.3d-118)) then
tmp = 0.5d0 * sqrt((2.0d0 * (re - im)))
else if (im <= 1.95d-305) then
tmp = sqrt(re)
else if (im <= 1.45d-194) then
tmp = 0.5d0 * (im / sqrt(-re))
else if (im <= 2.65d-110) then
tmp = sqrt(re)
else
tmp = 0.5d0 * sqrt((2.0d0 * (re + im)))
end if
code = tmp
end function
public static double code(double re, double im) {
double tmp;
if (im <= -1.3e-118) {
tmp = 0.5 * Math.sqrt((2.0 * (re - im)));
} else if (im <= 1.95e-305) {
tmp = Math.sqrt(re);
} else if (im <= 1.45e-194) {
tmp = 0.5 * (im / Math.sqrt(-re));
} else if (im <= 2.65e-110) {
tmp = Math.sqrt(re);
} else {
tmp = 0.5 * Math.sqrt((2.0 * (re + im)));
}
return tmp;
}
def code(re, im): tmp = 0 if im <= -1.3e-118: tmp = 0.5 * math.sqrt((2.0 * (re - im))) elif im <= 1.95e-305: tmp = math.sqrt(re) elif im <= 1.45e-194: tmp = 0.5 * (im / math.sqrt(-re)) elif im <= 2.65e-110: tmp = math.sqrt(re) else: tmp = 0.5 * math.sqrt((2.0 * (re + im))) return tmp
function code(re, im) tmp = 0.0 if (im <= -1.3e-118) tmp = Float64(0.5 * sqrt(Float64(2.0 * Float64(re - im)))); elseif (im <= 1.95e-305) tmp = sqrt(re); elseif (im <= 1.45e-194) tmp = Float64(0.5 * Float64(im / sqrt(Float64(-re)))); elseif (im <= 2.65e-110) tmp = sqrt(re); else tmp = Float64(0.5 * sqrt(Float64(2.0 * Float64(re + im)))); end return tmp end
function tmp_2 = code(re, im) tmp = 0.0; if (im <= -1.3e-118) tmp = 0.5 * sqrt((2.0 * (re - im))); elseif (im <= 1.95e-305) tmp = sqrt(re); elseif (im <= 1.45e-194) tmp = 0.5 * (im / sqrt(-re)); elseif (im <= 2.65e-110) tmp = sqrt(re); else tmp = 0.5 * sqrt((2.0 * (re + im))); end tmp_2 = tmp; end
code[re_, im_] := If[LessEqual[im, -1.3e-118], N[(0.5 * N[Sqrt[N[(2.0 * N[(re - im), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[im, 1.95e-305], N[Sqrt[re], $MachinePrecision], If[LessEqual[im, 1.45e-194], N[(0.5 * N[(im / N[Sqrt[(-re)], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[im, 2.65e-110], N[Sqrt[re], $MachinePrecision], N[(0.5 * N[Sqrt[N[(2.0 * N[(re + im), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;im \leq -1.3 \cdot 10^{-118}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re - im\right)}\\
\mathbf{elif}\;im \leq 1.95 \cdot 10^{-305}:\\
\;\;\;\;\sqrt{re}\\
\mathbf{elif}\;im \leq 1.45 \cdot 10^{-194}:\\
\;\;\;\;0.5 \cdot \frac{im}{\sqrt{-re}}\\
\mathbf{elif}\;im \leq 2.65 \cdot 10^{-110}:\\
\;\;\;\;\sqrt{re}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + im\right)}\\
\end{array}
\end{array}
if im < -1.3e-118Initial program 43.2%
Taylor expanded in im around -inf 77.5%
mul-1-neg77.5%
sub-neg77.5%
Simplified77.5%
if -1.3e-118 < im < 1.95000000000000013e-305 or 1.44999999999999985e-194 < im < 2.65e-110Initial program 42.8%
Taylor expanded in im around 0 53.2%
associate-*r*53.2%
unpow253.2%
rem-square-sqrt54.3%
metadata-eval54.3%
*-lft-identity54.3%
Simplified54.3%
if 1.95000000000000013e-305 < im < 1.44999999999999985e-194Initial program 12.2%
Taylor expanded in re around -inf 26.6%
*-commutative26.6%
associate-*l/26.6%
unpow226.6%
Simplified26.6%
expm1-log1p-u26.6%
expm1-udef26.6%
associate-*r/26.6%
*-commutative26.6%
associate-*r*26.6%
metadata-eval26.6%
Applied egg-rr26.6%
expm1-def26.6%
expm1-log1p26.6%
rem-exp-log26.6%
rem-exp-log26.6%
mul-1-neg26.6%
distribute-rgt-neg-in26.6%
Simplified26.6%
frac-2neg26.6%
sqrt-div25.8%
distribute-rgt-neg-out25.8%
remove-double-neg25.8%
sqrt-prod68.6%
add-sqr-sqrt68.8%
Applied egg-rr68.8%
if 2.65e-110 < im Initial program 47.7%
Taylor expanded in re around 0 73.7%
Final simplification70.0%
(FPCore (re im)
:precision binary64
(if (<= im -1.55e-117)
(* 0.5 (sqrt (* 2.0 (- re im))))
(if (<= im 2.1e-305)
(sqrt re)
(if (<= im 2.02e-190)
(* 0.5 (* im (sqrt (/ -1.0 re))))
(if (<= im 8.2e-111) (sqrt re) (* 0.5 (sqrt (* 2.0 (+ re im)))))))))
double code(double re, double im) {
double tmp;
if (im <= -1.55e-117) {
tmp = 0.5 * sqrt((2.0 * (re - im)));
} else if (im <= 2.1e-305) {
tmp = sqrt(re);
} else if (im <= 2.02e-190) {
tmp = 0.5 * (im * sqrt((-1.0 / re)));
} else if (im <= 8.2e-111) {
tmp = sqrt(re);
} else {
tmp = 0.5 * sqrt((2.0 * (re + im)));
}
return tmp;
}
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
real(8) :: tmp
if (im <= (-1.55d-117)) then
tmp = 0.5d0 * sqrt((2.0d0 * (re - im)))
else if (im <= 2.1d-305) then
tmp = sqrt(re)
else if (im <= 2.02d-190) then
tmp = 0.5d0 * (im * sqrt(((-1.0d0) / re)))
else if (im <= 8.2d-111) then
tmp = sqrt(re)
else
tmp = 0.5d0 * sqrt((2.0d0 * (re + im)))
end if
code = tmp
end function
public static double code(double re, double im) {
double tmp;
if (im <= -1.55e-117) {
tmp = 0.5 * Math.sqrt((2.0 * (re - im)));
} else if (im <= 2.1e-305) {
tmp = Math.sqrt(re);
} else if (im <= 2.02e-190) {
tmp = 0.5 * (im * Math.sqrt((-1.0 / re)));
} else if (im <= 8.2e-111) {
tmp = Math.sqrt(re);
} else {
tmp = 0.5 * Math.sqrt((2.0 * (re + im)));
}
return tmp;
}
def code(re, im): tmp = 0 if im <= -1.55e-117: tmp = 0.5 * math.sqrt((2.0 * (re - im))) elif im <= 2.1e-305: tmp = math.sqrt(re) elif im <= 2.02e-190: tmp = 0.5 * (im * math.sqrt((-1.0 / re))) elif im <= 8.2e-111: tmp = math.sqrt(re) else: tmp = 0.5 * math.sqrt((2.0 * (re + im))) return tmp
function code(re, im) tmp = 0.0 if (im <= -1.55e-117) tmp = Float64(0.5 * sqrt(Float64(2.0 * Float64(re - im)))); elseif (im <= 2.1e-305) tmp = sqrt(re); elseif (im <= 2.02e-190) tmp = Float64(0.5 * Float64(im * sqrt(Float64(-1.0 / re)))); elseif (im <= 8.2e-111) tmp = sqrt(re); else tmp = Float64(0.5 * sqrt(Float64(2.0 * Float64(re + im)))); end return tmp end
function tmp_2 = code(re, im) tmp = 0.0; if (im <= -1.55e-117) tmp = 0.5 * sqrt((2.0 * (re - im))); elseif (im <= 2.1e-305) tmp = sqrt(re); elseif (im <= 2.02e-190) tmp = 0.5 * (im * sqrt((-1.0 / re))); elseif (im <= 8.2e-111) tmp = sqrt(re); else tmp = 0.5 * sqrt((2.0 * (re + im))); end tmp_2 = tmp; end
code[re_, im_] := If[LessEqual[im, -1.55e-117], N[(0.5 * N[Sqrt[N[(2.0 * N[(re - im), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[im, 2.1e-305], N[Sqrt[re], $MachinePrecision], If[LessEqual[im, 2.02e-190], N[(0.5 * N[(im * N[Sqrt[N[(-1.0 / re), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[im, 8.2e-111], N[Sqrt[re], $MachinePrecision], N[(0.5 * N[Sqrt[N[(2.0 * N[(re + im), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;im \leq -1.55 \cdot 10^{-117}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re - im\right)}\\
\mathbf{elif}\;im \leq 2.1 \cdot 10^{-305}:\\
\;\;\;\;\sqrt{re}\\
\mathbf{elif}\;im \leq 2.02 \cdot 10^{-190}:\\
\;\;\;\;0.5 \cdot \left(im \cdot \sqrt{\frac{-1}{re}}\right)\\
\mathbf{elif}\;im \leq 8.2 \cdot 10^{-111}:\\
\;\;\;\;\sqrt{re}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + im\right)}\\
\end{array}
\end{array}
if im < -1.55000000000000005e-117Initial program 43.2%
Taylor expanded in im around -inf 77.5%
mul-1-neg77.5%
sub-neg77.5%
Simplified77.5%
if -1.55000000000000005e-117 < im < 2.1e-305 or 2.0200000000000001e-190 < im < 8.19999999999999936e-111Initial program 42.8%
Taylor expanded in im around 0 53.2%
associate-*r*53.2%
unpow253.2%
rem-square-sqrt54.3%
metadata-eval54.3%
*-lft-identity54.3%
Simplified54.3%
if 2.1e-305 < im < 2.0200000000000001e-190Initial program 12.2%
Taylor expanded in re around -inf 26.6%
*-commutative26.6%
associate-*l/26.6%
unpow226.6%
Simplified26.6%
sqrt-prod26.6%
associate-/l*26.6%
sqrt-div25.8%
sqrt-prod68.6%
add-sqr-sqrt68.7%
div-inv68.7%
metadata-eval68.7%
Applied egg-rr68.7%
*-commutative68.7%
associate-/r/68.7%
Simplified68.7%
div-inv68.8%
clear-num68.8%
sqrt-undiv69.0%
Applied egg-rr69.0%
*-commutative69.0%
associate-/r*69.0%
metadata-eval69.0%
Simplified69.0%
if 8.19999999999999936e-111 < im Initial program 47.7%
Taylor expanded in re around 0 73.7%
Final simplification70.0%
(FPCore (re im) :precision binary64 (if (<= re -5.1e-60) (* 0.5 (/ im (sqrt (- re)))) (if (<= re 6.5e-98) (* 0.5 (sqrt (* 2.0 (+ re im)))) (sqrt re))))
double code(double re, double im) {
double tmp;
if (re <= -5.1e-60) {
tmp = 0.5 * (im / sqrt(-re));
} else if (re <= 6.5e-98) {
tmp = 0.5 * sqrt((2.0 * (re + im)));
} else {
tmp = sqrt(re);
}
return tmp;
}
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
real(8) :: tmp
if (re <= (-5.1d-60)) then
tmp = 0.5d0 * (im / sqrt(-re))
else if (re <= 6.5d-98) then
tmp = 0.5d0 * sqrt((2.0d0 * (re + im)))
else
tmp = sqrt(re)
end if
code = tmp
end function
public static double code(double re, double im) {
double tmp;
if (re <= -5.1e-60) {
tmp = 0.5 * (im / Math.sqrt(-re));
} else if (re <= 6.5e-98) {
tmp = 0.5 * Math.sqrt((2.0 * (re + im)));
} else {
tmp = Math.sqrt(re);
}
return tmp;
}
def code(re, im): tmp = 0 if re <= -5.1e-60: tmp = 0.5 * (im / math.sqrt(-re)) elif re <= 6.5e-98: tmp = 0.5 * math.sqrt((2.0 * (re + im))) else: tmp = math.sqrt(re) return tmp
function code(re, im) tmp = 0.0 if (re <= -5.1e-60) tmp = Float64(0.5 * Float64(im / sqrt(Float64(-re)))); elseif (re <= 6.5e-98) tmp = Float64(0.5 * sqrt(Float64(2.0 * Float64(re + im)))); else tmp = sqrt(re); end return tmp end
function tmp_2 = code(re, im) tmp = 0.0; if (re <= -5.1e-60) tmp = 0.5 * (im / sqrt(-re)); elseif (re <= 6.5e-98) tmp = 0.5 * sqrt((2.0 * (re + im))); else tmp = sqrt(re); end tmp_2 = tmp; end
code[re_, im_] := If[LessEqual[re, -5.1e-60], N[(0.5 * N[(im / N[Sqrt[(-re)], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[re, 6.5e-98], N[(0.5 * N[Sqrt[N[(2.0 * N[(re + im), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[Sqrt[re], $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;re \leq -5.1 \cdot 10^{-60}:\\
\;\;\;\;0.5 \cdot \frac{im}{\sqrt{-re}}\\
\mathbf{elif}\;re \leq 6.5 \cdot 10^{-98}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + im\right)}\\
\mathbf{else}:\\
\;\;\;\;\sqrt{re}\\
\end{array}
\end{array}
if re < -5.09999999999999982e-60Initial program 8.3%
Taylor expanded in re around -inf 40.4%
*-commutative40.4%
associate-*l/40.4%
unpow240.4%
Simplified40.4%
expm1-log1p-u40.4%
expm1-udef21.6%
associate-*r/21.6%
*-commutative21.6%
associate-*r*21.6%
metadata-eval21.6%
Applied egg-rr21.6%
expm1-def40.5%
expm1-log1p40.5%
rem-exp-log39.2%
rem-exp-log40.5%
mul-1-neg40.5%
distribute-rgt-neg-in40.5%
Simplified40.5%
frac-2neg40.5%
sqrt-div53.2%
distribute-rgt-neg-out53.2%
remove-double-neg53.2%
sqrt-prod39.7%
add-sqr-sqrt46.2%
Applied egg-rr46.2%
if -5.09999999999999982e-60 < re < 6.50000000000000017e-98Initial program 53.7%
Taylor expanded in re around 0 38.8%
if 6.50000000000000017e-98 < re Initial program 50.9%
Taylor expanded in im around 0 65.0%
associate-*r*65.0%
unpow265.0%
rem-square-sqrt66.2%
metadata-eval66.2%
*-lft-identity66.2%
Simplified66.2%
Final simplification49.6%
(FPCore (re im) :precision binary64 (if (<= re -4.4e-54) (* 0.5 (/ im (sqrt (- re)))) (if (<= re 2.4e-155) (* 0.5 (sqrt (* im 2.0))) (sqrt re))))
double code(double re, double im) {
double tmp;
if (re <= -4.4e-54) {
tmp = 0.5 * (im / sqrt(-re));
} else if (re <= 2.4e-155) {
tmp = 0.5 * sqrt((im * 2.0));
} else {
tmp = sqrt(re);
}
return tmp;
}
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
real(8) :: tmp
if (re <= (-4.4d-54)) then
tmp = 0.5d0 * (im / sqrt(-re))
else if (re <= 2.4d-155) then
tmp = 0.5d0 * sqrt((im * 2.0d0))
else
tmp = sqrt(re)
end if
code = tmp
end function
public static double code(double re, double im) {
double tmp;
if (re <= -4.4e-54) {
tmp = 0.5 * (im / Math.sqrt(-re));
} else if (re <= 2.4e-155) {
tmp = 0.5 * Math.sqrt((im * 2.0));
} else {
tmp = Math.sqrt(re);
}
return tmp;
}
def code(re, im): tmp = 0 if re <= -4.4e-54: tmp = 0.5 * (im / math.sqrt(-re)) elif re <= 2.4e-155: tmp = 0.5 * math.sqrt((im * 2.0)) else: tmp = math.sqrt(re) return tmp
function code(re, im) tmp = 0.0 if (re <= -4.4e-54) tmp = Float64(0.5 * Float64(im / sqrt(Float64(-re)))); elseif (re <= 2.4e-155) tmp = Float64(0.5 * sqrt(Float64(im * 2.0))); else tmp = sqrt(re); end return tmp end
function tmp_2 = code(re, im) tmp = 0.0; if (re <= -4.4e-54) tmp = 0.5 * (im / sqrt(-re)); elseif (re <= 2.4e-155) tmp = 0.5 * sqrt((im * 2.0)); else tmp = sqrt(re); end tmp_2 = tmp; end
code[re_, im_] := If[LessEqual[re, -4.4e-54], N[(0.5 * N[(im / N[Sqrt[(-re)], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[re, 2.4e-155], N[(0.5 * N[Sqrt[N[(im * 2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[Sqrt[re], $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;re \leq -4.4 \cdot 10^{-54}:\\
\;\;\;\;0.5 \cdot \frac{im}{\sqrt{-re}}\\
\mathbf{elif}\;re \leq 2.4 \cdot 10^{-155}:\\
\;\;\;\;0.5 \cdot \sqrt{im \cdot 2}\\
\mathbf{else}:\\
\;\;\;\;\sqrt{re}\\
\end{array}
\end{array}
if re < -4.3999999999999999e-54Initial program 8.5%
Taylor expanded in re around -inf 41.6%
*-commutative41.6%
associate-*l/41.6%
unpow241.6%
Simplified41.6%
expm1-log1p-u41.6%
expm1-udef22.2%
associate-*r/22.2%
*-commutative22.2%
associate-*r*22.2%
metadata-eval22.2%
Applied egg-rr22.2%
expm1-def41.6%
expm1-log1p41.7%
rem-exp-log40.3%
rem-exp-log41.7%
mul-1-neg41.7%
distribute-rgt-neg-in41.7%
Simplified41.7%
frac-2neg41.7%
sqrt-div54.8%
distribute-rgt-neg-out54.8%
remove-double-neg54.8%
sqrt-prod39.3%
add-sqr-sqrt46.0%
Applied egg-rr46.0%
if -4.3999999999999999e-54 < re < 2.4e-155Initial program 49.1%
Taylor expanded in re around 0 39.3%
*-commutative39.3%
sqrt-unprod39.5%
Applied egg-rr39.5%
if 2.4e-155 < re Initial program 55.0%
Taylor expanded in im around 0 60.3%
associate-*r*60.3%
unpow260.3%
rem-square-sqrt61.5%
metadata-eval61.5%
*-lft-identity61.5%
Simplified61.5%
Final simplification49.5%
(FPCore (re im) :precision binary64 (if (<= im 2.6e-110) (sqrt re) (* 0.5 (sqrt (* im 2.0)))))
double code(double re, double im) {
double tmp;
if (im <= 2.6e-110) {
tmp = sqrt(re);
} 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 (im <= 2.6d-110) then
tmp = sqrt(re)
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 (im <= 2.6e-110) {
tmp = Math.sqrt(re);
} else {
tmp = 0.5 * Math.sqrt((im * 2.0));
}
return tmp;
}
def code(re, im): tmp = 0 if im <= 2.6e-110: tmp = math.sqrt(re) else: tmp = 0.5 * math.sqrt((im * 2.0)) return tmp
function code(re, im) tmp = 0.0 if (im <= 2.6e-110) tmp = sqrt(re); else tmp = Float64(0.5 * sqrt(Float64(im * 2.0))); end return tmp end
function tmp_2 = code(re, im) tmp = 0.0; if (im <= 2.6e-110) tmp = sqrt(re); else tmp = 0.5 * sqrt((im * 2.0)); end tmp_2 = tmp; end
code[re_, im_] := If[LessEqual[im, 2.6e-110], N[Sqrt[re], $MachinePrecision], N[(0.5 * N[Sqrt[N[(im * 2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;im \leq 2.6 \cdot 10^{-110}:\\
\;\;\;\;\sqrt{re}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{im \cdot 2}\\
\end{array}
\end{array}
if im < 2.5999999999999999e-110Initial program 39.2%
Taylor expanded in im around 0 29.8%
associate-*r*29.8%
unpow229.8%
rem-square-sqrt30.4%
metadata-eval30.4%
*-lft-identity30.4%
Simplified30.4%
if 2.5999999999999999e-110 < im Initial program 47.7%
Taylor expanded in re around 0 72.3%
*-commutative72.3%
sqrt-unprod72.7%
Applied egg-rr72.7%
Final simplification43.4%
(FPCore (re im) :precision binary64 (sqrt re))
double code(double re, double im) {
return sqrt(re);
}
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
code = sqrt(re)
end function
public static double code(double re, double im) {
return Math.sqrt(re);
}
def code(re, im): return math.sqrt(re)
function code(re, im) return sqrt(re) end
function tmp = code(re, im) tmp = sqrt(re); end
code[re_, im_] := N[Sqrt[re], $MachinePrecision]
\begin{array}{l}
\\
\sqrt{re}
\end{array}
Initial program 41.8%
Taylor expanded in im around 0 25.5%
associate-*r*25.5%
unpow225.5%
rem-square-sqrt26.0%
metadata-eval26.0%
*-lft-identity26.0%
Simplified26.0%
Final simplification26.0%
(FPCore (re im)
:precision binary64
(let* ((t_0 (sqrt (+ (* re re) (* im im)))))
(if (< re 0.0)
(* 0.5 (* (sqrt 2.0) (sqrt (/ (* im im) (- t_0 re)))))
(* 0.5 (sqrt (* 2.0 (+ t_0 re)))))))
double code(double re, double im) {
double t_0 = sqrt(((re * re) + (im * im)));
double tmp;
if (re < 0.0) {
tmp = 0.5 * (sqrt(2.0) * sqrt(((im * im) / (t_0 - re))));
} else {
tmp = 0.5 * sqrt((2.0 * (t_0 + 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) :: tmp
t_0 = sqrt(((re * re) + (im * im)))
if (re < 0.0d0) then
tmp = 0.5d0 * (sqrt(2.0d0) * sqrt(((im * im) / (t_0 - re))))
else
tmp = 0.5d0 * sqrt((2.0d0 * (t_0 + re)))
end if
code = tmp
end function
public static double code(double re, double im) {
double t_0 = Math.sqrt(((re * re) + (im * im)));
double tmp;
if (re < 0.0) {
tmp = 0.5 * (Math.sqrt(2.0) * Math.sqrt(((im * im) / (t_0 - re))));
} else {
tmp = 0.5 * Math.sqrt((2.0 * (t_0 + re)));
}
return tmp;
}
def code(re, im): t_0 = math.sqrt(((re * re) + (im * im))) tmp = 0 if re < 0.0: tmp = 0.5 * (math.sqrt(2.0) * math.sqrt(((im * im) / (t_0 - re)))) else: tmp = 0.5 * math.sqrt((2.0 * (t_0 + re))) return tmp
function code(re, im) t_0 = sqrt(Float64(Float64(re * re) + Float64(im * im))) tmp = 0.0 if (re < 0.0) tmp = Float64(0.5 * Float64(sqrt(2.0) * sqrt(Float64(Float64(im * im) / Float64(t_0 - re))))); else tmp = Float64(0.5 * sqrt(Float64(2.0 * Float64(t_0 + re)))); end return tmp end
function tmp_2 = code(re, im) t_0 = sqrt(((re * re) + (im * im))); tmp = 0.0; if (re < 0.0) tmp = 0.5 * (sqrt(2.0) * sqrt(((im * im) / (t_0 - re)))); else tmp = 0.5 * sqrt((2.0 * (t_0 + re))); end tmp_2 = tmp; end
code[re_, im_] := Block[{t$95$0 = N[Sqrt[N[(N[(re * re), $MachinePrecision] + N[(im * im), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]}, If[Less[re, 0.0], N[(0.5 * N[(N[Sqrt[2.0], $MachinePrecision] * N[Sqrt[N[(N[(im * im), $MachinePrecision] / N[(t$95$0 - re), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(0.5 * N[Sqrt[N[(2.0 * N[(t$95$0 + re), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \sqrt{re \cdot re + im \cdot im}\\
\mathbf{if}\;re < 0:\\
\;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \sqrt{\frac{im \cdot im}{t_0 - re}}\right)\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(t_0 + re\right)}\\
\end{array}
\end{array}
herbie shell --seed 2023174
(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)))))